Come rimuovere i duplicati dall'elenco Python e mantenere l'ordine? [duplicare]
Domanda
Questa domanda ha già una risposta qui:
Dato un elenco di stringhe, voglio ordinarlo in ordine alfabetico e rimuovere i duplicati. So di poterlo fare:
from sets import Set
[...]
myHash = Set(myList)
ma non so come recuperare i membri della lista dall'hash in ordine alfabetico.
Non sono sposato con l'hash, quindi qualsiasi modo per farlo funzionerà. Inoltre, le prestazioni non sono un problema, quindi preferirei una soluzione espressa chiaramente in codice a una veloce ma più opaca.
Altri suggerimenti
Se il tuo input è già ordinato, potrebbe esserci un modo più semplice per farlo:
from operator import itemgetter
from itertools import groupby
unique_list = list(map(itemgetter(0), groupby(yourList)))
Se vuoi mantenere l'ordine dell'elenco originale, usa OrderedDict con None
come valori.
In Python2:
from collections import OrderedDict
from itertools import izip, repeat
unique_list = list(OrderedDict(izip(my_list, repeat(None))))
In Python3 è ancora più semplice:
from collections import OrderedDict
from itertools import repeat
unique_list = list(OrderedDict(zip(my_list, repeat(None))))
Se non ti piacciono gli iteratori (zip e ripetizione) puoi usare un generatore (funziona sia in 2 & amp; 3):
from collections import OrderedDict
unique_list = list(OrderedDict((element, None) for element in my_list))
Se è la chiarezza che cerchi, piuttosto che la velocità, penso che sia molto chiaro:
def sortAndUniq(input):
output = []
for x in input:
if x not in output:
output.append(x)
output.sort()
return output
È O (n ^ 2) però, con l'uso ripetuto di non in per ogni elemento dell'elenco di input.
gt &; ma non so come recuperare i membri della lista dall'hash in ordine alfabetico.
Non proprio la tua domanda principale, ma per riferimento futuro la risposta di Rod usando sorted
può essere usata per attraversare le chiavi di dict
in ordine ordinato:
for key in sorted(my_dict.keys()):
print key, my_dict[key]
...
e anche perché tuple
sono ordinati dal primo membro della tupla, puoi fare lo stesso con items
:
for key, val in sorted(my_dict.items()):
print key, val
...
Per i dati della stringa
output = []
def uniq(input):
if input not in output:
output.append(input)
print output