La comparación de valores de los elementos de la lista a otros artículos en otra lista en Python

StackOverflow https://stackoverflow.com/questions/2244443

  •  19-09-2019
  •  | 
  •  

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)

¿Fue útil?

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))

set.difference :

>>> 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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top