Сравнение значений элементов списка с другими элементами в другом списке в Python
Вопрос
Я хочу сравнить значения в одном списке со значениями во втором списке и вернуть все те, которые есть в первом списке, но не во втором, т.е.
list1 = ['one','two','three','four','five']
list2 = ['one','two','four']
вернет «три» и «пять».
У меня лишь небольшой опыт работы с Python, поэтому попытка решить эту проблему может оказаться нелепой и глупой, но на данный момент я сделал вот что:
def unusedCategories(self):
unused = []
for category in self.catList:
if category != used in self.usedList:
unused.append(category)
return unused
Однако это вызывает ошибку «итерация по непоследовательности», которая, как я понимаю, означает, что один или оба «списка» на самом деле не являются списками (необработанный вывод для обоих имеет тот же формат, что и мой первый пример)
Решение
Используйте наборы, чтобы получить разницу между списками:
>>> list1 = ['one','two','three','four','five']
>>> list2 = ['one','two','four']
>>> set(list1) - set(list2)
set(['five', 'three'])
Другие советы
set(list1).difference(set(list2))
>>> list1 = ['one','two','three','four','five']
>>> list2 = ['one','two','four']
>>> set(list1).difference(list2)
{'five', 'three'}
вы можете пропустить преобразование list2
устанавливать.
Вы можете сделать это с помощью наборов или понимания списка:
unused = [i for i in list1 if i not in list2]
Все ответы здесь правильные.Я бы использовал понимание списков, если списки короткие;наборы будут более эффективными.Исследуя, почему ваш код не работает, я не получаю ошибки.(Это не работает, но это другая проблема).
>>> list1 = ['a','b','c']
>>> list2 = ['a','b','d']
>>> [c for c in list1 if not c in list2]
['c']
>>> set(list1).difference(set(list2))
set(['c'])
>>> L = list()
>>> for c in list1:
... if c != L in list2:
... L.append(c)
...
>>> L
[]
Проблема в том, что if
заявление не имеет смысла.Надеюсь это поможет.