#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)`
На самом деле вы были близки.. Попробуйте это и используйте функцию добавления. Если это сработает, не забудьте проголосовать