Mit einer Liste von Zeichenfolgen möchte ich sie alphabetisch sortieren und Duplikate entfernen. Ich weiß ich kann das:
from sets import Set
[...]
myHash = Set(myList)
ich weiß jedoch nicht, wie ich die Listenmitglieder in alphabetischer Reihenfolge vom Hash abrufen kann.
Ich bin nicht mit dem Haschisch verheiratet, also wird dies alles funktionieren. Auch die Leistung ist kein Problem, daher würde ich eine Lösung bevorzugen, die sich klar im Code ausdrückt, aber eine undurchsichtige Lösung.
Wenn Ihre Eingabe bereits sortiert ist, gibt es möglicherweise einen einfacheren Weg:
from operator import itemgetter
from itertools import groupby
unique_list = list(map(itemgetter(0), groupby(yourList)))
Wenn Sie die Reihenfolge der ursprünglichen Liste beibehalten möchten, verwenden Sie einfach OrderedDict mit None
als Werte.
In Python2:
from collections import OrderedDict
from itertools import izip, repeat
unique_list = list(OrderedDict(izip(my_list, repeat(None))))
In Python3 ist es noch einfacher:
from collections import OrderedDict
from itertools import repeat
unique_list = list(OrderedDict(Zip(my_list, repeat(None))))
Wenn Sie keine Iteratoren mögen (Zip und Repeat), können Sie einen Generator verwenden (funktioniert in 2 und 3):
from collections import OrderedDict
unique_list = list(OrderedDict((element, None) for element in my_list))
Wenn Sie mehr Wert auf Klarheit als auf Geschwindigkeit legen, ist dies meiner Meinung nach ganz klar:
def sortAndUniq(input):
output = []
for x in input:
if x not in output:
output.append(x)
output.sort()
return output
Es ist jedoch O (n ^ 2) mit der wiederholten Verwendung von nicht in für jedes Element der Eingabeliste.
> aber ich weiß nicht, wie ich die Listenmitglieder in alphabetischer Reihenfolge vom Hash abrufen kann.
Nicht wirklich Ihre Hauptfrage, aber für die zukünftige Referenz kann Rods Antwort mit sorted
verwendet werden, um die Schlüssel einer dict
in sortierter Reihenfolge zu durchlaufen:
for key in sorted(my_dict.keys()):
print key, my_dict[key]
...
und weil Tuple
von dem ersten Mitglied des Tuples geordnet wird, können Sie dasselbe mit items
tun:
for key, val in sorted(my_dict.items()):
print key, val
...
Für die Zeichenfolgendaten
output = []
def uniq(input):
if input not in output:
output.append(input)
print output