En comparant les valeurs des éléments de la liste à d'autres éléments dans une autre liste en Python

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

  •  19-09-2019
  •  | 
  •  

Question

Je veux comparer les valeurs dans une liste des valeurs dans une seconde liste et retourner tous ceux qui sont dans la première liste, mais pas dans la seconde i.e..

list1 = ['one','two','three','four','five']
list2 = ['one','two','four']

renverrait 'trois' et 'cinq'.

Je n'ai que peu d'expérience avec python, donc cela peut se révéler une façon ridicule et stupide pour tenter de le résoudre, mais ce que je l'ai fait jusqu'à présent:

def unusedCategories(self):
    unused = []
    for category in self.catList:
        if category != used in self.usedList:
            unused.append(category)
    return unused

Cependant, cela renvoie une erreur « itération sur non-séquence », que je crois en ce sens que l'un ou les deux « listes » ne sont pas des listes effectivement (la sortie brute pour les deux est dans le même format que mon premier exemple)

Était-ce utile?

La solution

Utilisez des ensembles pour obtenir la différence entre les listes:

>>> list1 = ['one','two','three','four','five']
>>> list2 = ['one','two','four']
>>> set(list1) - set(list2)
set(['five', 'three'])

Autres conseils

set(list1).difference(set(list2))

set.difference :

>>> list1 = ['one','two','three','four','five']
>>> list2 = ['one','two','four']
>>> set(list1).difference(list2)
{'five', 'three'}

vous pouvez sauter la conversion de list2 à définir.

Vous pouvez le faire avec des jeux ou une compréhension de la liste:

unused = [i for i in list1 if i not in list2]

Toutes les réponses ici sont corrects. J'utilise la compréhension de la liste si les listes sont courtes; ensembles seront plus efficaces. En Raisons pour lesquelles votre code ne fonctionne pas, je ne comprends pas l'erreur. (Il ne fonctionne pas, mais c'est une autre question).

>>> 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
[]

Le problème est que la déclaration de if n'a pas de sens. Espérons que cela aide.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top