Мне нужно сравнить два списка и проверить, есть ли строка из list1 в list2

#python #list

#python #Список

Вопрос:

Итак, у меня будет два списка, подобных этому:

 list1 = ['p', '-x', 'q123', '-q3']
list2 = ['p56', '-p', '-q123', 'xr']
  

Итак, допустим, если

СЛУЧАЙ 1: элемент из list1 == 'p' мне нужно проверить, находится ли ‘-p’ в list2 или,

СЛУЧАЙ 2: элемент из list1== '-p' мне нужно проверить, есть ли ‘p’ в list2.

А затем удалите элемент из list1, если сработает какой-либо из этих случаев, чтобы у меня остались только элементы, которые отображаются только в отрицательной форме или отображаются только в положительной форме. Прямо сейчас я могу выполнить СЛУЧАЙ 1, но я не уверен, как выполнить СЛУЧАЙ 2.

     
list1 = ['p', '-x', 'q123', '-q3']
list2 = ['p56', '-p', '-q123', 'xr']
new_list1 = list1.copy()
for y in list1:
    for x in list2:
        if x == '-' y:
            new_list1.remove(y)
      
  

Для этих двух списков у меня останется только тогда, когда я обработаю оба случая

 new_list1 = ['-q3']
  

Прямо сейчас я получаю это:

 new_list1 = ['-x', '-q3']
  

Ответ №1:

 def toggle(x):
    if x[0] == '-':
        return x[1:]
    else:
        return '-' x

list1 = ['p', '-x', 'q123', '-q3']
list2 = ['p56', '-p', '-q123', 'x']
new_list1 = list1.copy()
for y in list1:
    for x in list2:
        if x == toggle(y):
            new_list1.remove(y)
  

это поможет вам new_list1 == ['-q3']

Более экономичный по времени способ:

 list1 = ['p', '-x', 'q123', '-q3']
list2 = ['p56', '-p', '-q123', 'x']
toggled_list2 = set(toggle(y) for y in list2)
new_list2 = list(set(list1).difference(toggled_list2))

# new_list2 == ['-q3']
  

Комментарии:

1. лучше (в соответствии с рекомендациями PEP8) использовать str.startswith() метод

Ответ №2:

 list1 = ['p', '-x', 'q123', '-q3']
list2 = ['p56', '-p', '-q123', 'xr']
    new_list1 = list1.copy()
    for y in list1:
        for x in list2:
            if y == '-' x:
                new_list1.append(x)` 
  

На самом деле вы были близки.. Попробуйте это и используйте функцию добавления. Если это сработает, не забудьте проголосовать