Confrontando i valori della lista voce ad altri elementi in un'altra lista in Python

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

  •  19-09-2019
  •  | 
  •  

Domanda

voglio mettere a confronto i valori in una lista per i valori in un secondo elenco e restituire tutti coloro che sono nella prima lista, ma non nella seconda cioè.

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

sarebbe tornato 'a tre' e 'cinque'.

Ho solo un po 'di esperienza con Python, quindi questo può risultare essere un modo ridicolo e stupido per tentare di risolverlo, ma questo quello che ho fatto finora:

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

Tuttavia, questo genera un errore 'iterazione su non-sequenza', che mi risulta significare che uno o entrambi 'elenchi' sono in realtà non elenca (l'uscita prima per entrambi è nello stesso formato come il mio primo esempio)

È stato utile?

Soluzione

Usa imposta per ottenere la differenza tra le liste:

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

Altri suggerimenti

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

set.difference :

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

è possibile saltare la conversione di list2 per impostare.

Si può fare con i set o una lista di comprensione:

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

Tutte le risposte qui sono corrette. Vorrei usare di lista se le liste sono brevi; set saranno più efficienti. Nell'esplorare il motivo per cui il codice non funziona, non ottengo l'errore. (Non funziona, ma questa è una questione diversa).

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

Il problema è che la dichiarazione if non ha senso. Spero che questo aiuti.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top