[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