Uso groupby:
>>> from itertools import groupby
>>> a = [1, 2, 3, 3, 5, 9, 6, 2, 8, 5, 2, 3, 5, 7, 3, 5, 8]
>>> [k for k, _ in groupby(sorted(a, key=lambda x: a.index(x)))]
[1, 2, 3, 5, 9, 6, 8, 7]
lasciare fuori l'argomento chiave se non si preoccupano che ordinare il valore prima apparizione nella lista originale, per esempio
>>> [k for k, _ in groupby(sorted(a))]
[1, 2, 3, 5, 6, 7, 8, 9]
si possono fare alcune cose interessanti con groupby
. Per identificare gli elementi che compaiono più volte:
>>> [k for k, v in groupby(sorted(a)) if len(list(v)) > 1]
[2, 3, 5, 8]
o per costruire un dizionario di frequenza:
>>> {k: len(list(v)) for k, v in groupby(sorted(a))}
{1: 1, 2: 3, 3: 4, 5: 4, 6: 1, 7: 1, 8: 2, 9: 1}
Ci sono alcune funzioni molto utili nel modulo itertools: chain
, tee
e product
per citarne alcuni !
Poiché 'b' è vuoto nel momento in cui si esegue' se l'elemento non è in b'. La comprensione delle liste viene eseguita in memoria e il risultato viene assegnato a 'b' alla fine. –
possibile duplicato di [Algoritmo - Come eliminare in modo efficiente gli elementi duplicati in un elenco?] (Http://stackoverflow.com/questions/1801459/algorithm-how-to-delect-duplicate-elements-in-a-list-efficiently) –
Ciò significa che la comprensione delle liste non funziona come il ciclo? – Alinwndrld