Comparando valores item da lista para outros itens na outra lista em Python
Pergunta
Eu quero comparar os valores em uma lista para os valores em uma segunda lista e voltar todos os que estão na primeira lista, mas não no segundo i.
list1 = ['one','two','three','four','five']
list2 = ['one','two','four']
retornaria 'três' e 'cinco'.
Eu só tenho um pouco de experiência com python, então isso pode vir a ser uma forma ridícula e estúpida para tentar resolvê-lo, mas isso o que eu fiz até agora:
def unusedCategories(self):
unused = []
for category in self.catList:
if category != used in self.usedList:
unused.append(category)
return unused
No entanto, este gera um erro 'iteração sobre não-sequência', que I se reunir para significar que uma ou ambas as 'listas' não são realmente listas (a saída crua para ambos é no mesmo formato como o meu primeiro exemplo)
Solução
Use define para obter a diferença entre as listas:
>>> list1 = ['one','two','three','four','five']
>>> list2 = ['one','two','four']
>>> set(list1) - set(list2)
set(['five', 'three'])
Outras dicas
set(list1).difference(set(list2))
>>> list1 = ['one','two','three','four','five']
>>> list2 = ['one','two','four']
>>> set(list1).difference(list2)
{'five', 'three'}
Você pode pular conversão de list2
a set.
Você pode fazê-lo com jogos ou uma compreensão da lista:
unused = [i for i in list1 if i not in list2]
Todas as respostas aqui são corretas. Eu usaria compreensão da lista, se as listas são curtos; conjuntos será mais eficiente. Ao explorar por que seu código não funciona, eu não obter o erro. (Ele não funciona, mas isso é uma questão diferente).
>>> 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
[]
O problema é que a declaração if
não faz sentido.
Espero que isso ajude.