[Python-de] Liste uniquify

Thomas 'PointedEars' Lahn PointedEars at web.de
Sa Nov 19 21:36:57 CET 2011


Mike Müller wrote:

> Die Lösung mit einem Set ist aber wesentlich performanter und
> meiner Meinung nach auch leichter zu verstehen.
> In Python sind die eleganten Lösungen auch bei der Performance oft
> (nicht immer) die besseren.
> Ich denke die Set-Lösung ist der bevorzugte Weg in Python für
> dieses Problem.

Sehe ich auch so.  Weshalb aber reproduzierbar

$ python
Python 2.6.7 (r267:88850, Jul 10 2011, 09:55:27) 
[GCC 4.6.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> list(set(["a", "a", "b", "e", "c", "g", "d", "g"]))
['a', 'c', 'b', 'e', 'd', 'g']

und _nicht_ wie vom OP gewünscht (und erwartet)

['a', 'b', 'e', 'c', 'g', 'd']?  Auch mit

  li = ["a", "a", "b", "e", "c", "g", "d", "g"]
  s = set()
  for item in li:
    s.add(item)
  print s
  print list(s)

erhalte ich reproduzierbar das erste Ergebnis, obwohl über die Liste wie 
erwartet vom Anfang zum Ende (v. l. n. r.) iteriert wird.  Ein Set wird in 
der Dokumentation als eine ungeordnete Sammlung von einzigartigen Elementen
("an unordered collection of unique elements") definiert, bloss liegt
dieser anscheinend doch ein Ordnungsprinzip zugrunde.  Welches?

-- 
PointedEars

Please do not Cc: me. / Bitte keine Kopien per E-Mail.


Mehr Informationen über die Mailingliste python-de