[Python-de] Liste uniquify
Diez B. Roggisch
deets at web.de
Do Nov 10 20:33:28 CET 2011
On Nov 10, 2011, at 8:24 PM, Philipp Kraus wrote:
> Hallo,
>
> ich möchte aus einer Liste Duplikate entfernen. Im Moment mache ich das mit
> def unique(seq):
> keys = {}
> for e in seq:
> keys[e] = 1
> return keys.keys()
>
> das Problem dabei ist aber, dass mir dadurch die Reihenfolge der Element verändert wird.
> Ich möchte gerne folgendes haben, wenn die Liste so aussieht [a, a, b, e, c, g, d, g], soll
> das Resultant nach dem entfernen von den Duplikaten so aussehen [a, b, e, c, g, d]
> also immer das erste Auftreten eines Elementes soll erhalten bleiben.
>
> Ist ein
> newlist = []
> for i in list :
> if not i in newlist :
> newlist.append(i)
>
> dafür so gedacht, oder kann man das etwas besser machen?
Sehr viel besser sogar - denn das was du da machst in ein Schlemiel-the-Painter Algorithmus:
http://en.wikipedia.org/wiki/Schlemiel_the_Painter's_algorithm
Deine erste Loesung ist doch schon fast richtig.
Statt einem dictionary kannst du ein Set nehmen, und dann sieht das etwa so aus:
def unique(seq):
duplicates = set()
for item in seq:
if item not in duplicates:
duplicates.add(item)
yield item
Diez
-------------- nächster Teil --------------
Ein Dateianhang mit HTML-Daten wurde abgetrennt...
URL: <http://mail.python.org/pipermail/python-de/attachments/20111110/7c879625/attachment.html>
Mehr Informationen über die Mailingliste python-de