La comparación de valores de los elementos de la lista a otros artículos en otra lista en Python
Pregunta
quiero comparar los valores en una lista a los valores en una segunda lista y volver todos los que están en la primera lista, pero no en el segundo es decir.
list1 = ['one','two','three','four','five']
list2 = ['one','two','four']
volvería 'tres' y 'cinco'.
Sólo tengo un poco de experiencia con Python, por lo que este puede llegar a ser una forma ridícula y estúpida para intentar resolverlo, pero esto lo que he hecho hasta ahora:
def unusedCategories(self):
unused = []
for category in self.catList:
if category != used in self.usedList:
unused.append(category)
return unused
Sin embargo, esto genera un error 'iteración sobre la no-secuencia', que tengo entendido en el sentido de que uno o ambos 'listas' no son realmente listas (la salida prima para tanto está en el mismo formato que mi primer ejemplo)
Solución
Uso establece para obtener la diferencia entre las listas:
>>> list1 = ['one','two','three','four','five']
>>> list2 = ['one','two','four']
>>> set(list1) - set(list2)
set(['five', 'three'])
Otros consejos
set(list1).difference(set(list2))
>>> list1 = ['one','two','three','four','five']
>>> list2 = ['one','two','four']
>>> set(list1).difference(list2)
{'five', 'three'}
puede omitir la conversión de list2
ajustar.
Puede hacerlo con juegos o una lista de comprensión:
unused = [i for i in list1 if i not in list2]
Todas las respuestas aquí son correctos. Yo usaría lista por comprensión si las listas son cortas; conjuntos serán más eficientes. En la exploración de por qué su código no funciona, no me sale el error. (No funciona, pero eso es otro tema).
>>> 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
[]
El problema es que la declaración if
no tiene sentido.
Espero que esto ayude.