2013-03-16 10 views
31

Ho bisogno di confrontare due liste in Python, e so di usare il comando set per trovare oggetti simili, ma c'è un altro comando che potrei usare che sarebbe automaticamente confrontarli, invece di dover codificarli?Python - Usa 'set' per trovare i diversi elementi nell'elenco

Mi piacerebbe trovare gli articoli che non sono in ciascuno. Di 'elenco una è la seguente:

[1, 2, 3, 4, 5, 6] 

e l'elenco due è:

[1, 2, 3, 4, 6] 

voglio scoprire che 5 manca dalla lista, si spera da un comando, ma io so come anello attraverso il confronto.

+6

Cosa è necessario confrontare? Hai bisogno di trovare gli articoli corrispondenti? Che cosa hai esattamente bisogno di fare? –

+4

Ugh, non c'è bisogno di votare per chiudere ancora. Offri a OP la possibilità di modificare la domanda e fornire un contesto. –

+0

Voglio dire, mi piacerebbe trovare gli elementi che non sono in ciascuno di essi. Di 'la lista uno è la seguente: [1, 2, 3, 4, 5, 6] e la lista due è: [1, 2, 3, 4, 6]. Voglio scoprire che manca 5 dalla lista, si spera da un comando, ma so come fare un ciclo attraverso il confronto –

risposta

25

Sembra che tu abbia bisogno differenza simmetrica:

a = [1,2,3] 
b = [3,4,5] 

print(set(a)^set(b)) 


>>> [1,2,4,5] 
43

Il docs sono un buon punto di partenza. Ecco alcuni esempi che potrebbero aiutarti a determinare come confrontare i tuoi set.

Per trovare l'intersezione (gli oggetti che si trovano in entrambi i set):

>>> a = set([1, 2, 3, 4, 5, 6]) 
>>> b = set([4, 5, 6, 7, 8, 9]) 
>>> a & b 
set([4, 5, 6]) 

Per calcolare la differenza (gli elementi che in un solo set):

>>> a = set([1, 2, 3, 4, 5, 6]) 
>>> b = set([4, 5, 6, 7, 8, 9]) 
>>> a - b 
set([1, 2, 3]) 
>>> b - a 
set([7, 8, 9]) 

Per calcolare la differenza simmetrica (elementi che sono in uno o l'altro, ma non entrambi):

>>> a = set([1, 2, 3, 4, 5, 6]) 
>>> b = set([4, 5, 6, 7, 8, 9]) 
>>> a^b 
set([1, 2, 3, 7, 8, 9]) 

Spero che questo aiuti.

+0

Grazie! Lo ricorderò e lo manterrò di più quando avrò 15 rep-cose, è un _ ** very ** _ post ben fatto. Grazie! –

3

un elenco semplice comprensione

In [1]: a=[1, 2, 3, 4, 5, 6] 

In [2]: b=[1, 2, 3, 4, 6] 

In [3]: [i for i in a if i not in b] 
Out[3]: [5] 
+0

Trova elementi in una che non sono in b, piuttosto che trovare elementi non in ogni .. quindi è la differenza ma non la differenza simmetrica. – Spaceghost

+0

@Spaceghost - true. Ho appena usato l'esempio di OP direttamente da –

+0

OP chiesto elementi non in ognuno .. altrimenti, avrei svottato questo. – Spaceghost

Problemi correlati