Im Vergleich Listen Elementwerte auf andere Elemente in einer anderen Liste in Python

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

  •  19-09-2019
  •  | 
  •  

Frage

Ich mag die Werte in einer Liste mit den Werten in einer zweiten Liste vergleichen und alle diejenigen zurück, die in der ersten Liste sind aber nicht in dem zweiten d.

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

zurückkehren würde 'drei' und 'fünf'.

Ich habe nur ein wenig Erfahrung mit Python, so dass dies könnte sich herausstellen eine lächerliche und dumme Art und Weise sein, um zu versuchen, es zu lösen, aber das, was ich bisher getan haben:

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

Allerdings wirft dies auf einen Fehler ‚Iteration über nicht-Sequenz‘, die ich sammle, dass man bedeuten oder beide ‚Listen‘ sind nicht wirklich Listen (die Rohausgangssignal für beide sind im gleichen Format wie mein erstes Beispiel)

War es hilfreich?

Lösung

setzt Verwenden Sie den Unterschied zwischen den Listen zu bekommen:

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

Andere Tipps

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

set.difference :

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

Sie können Umwandlung von list2 zu Satz überspringen.

Sie können es mit Sätzen tun oder eine Liste Verständnis:

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

Alle Antworten sind hier richtig. Ich würde Liste Verständnis verwenden, wenn die Listen kurz sind; Sets werden effizienter. Bei der Erforschung, warum Ihr Code nicht funktioniert, ich habe nicht den Fehler. (Es funktioniert nicht, aber das ist ein anderes Thema).

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

Das Problem ist, dass die if Aussage macht keinen Sinn. Hoffe, das hilft.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top