[Python-de] Aus'ner Liste jeden Wert einmal rausfischen....
Rainer Fischbach
fischbach at ecs-gmbh.de
Thu Sep 12 11:54:16 EDT 2002
At 22:25 11.09.2002 +0200, you wrote:
>Ich bin heute über folgenden Code-Schnipsel gestolpert, der eine Liste
>ähnlich wie bei 'uniq' unter *IX eindampft.
>
>uniqValues = reduce(lambda a,b : a.setdefault(b, a), values, {}).keys()
>
>Kann man das wirklich so machen? Eigentlich habe ich da ein komisches
>Gefühl dabei, weil ja jeder Node im Dictionary mit dem Dictionary selber
>verknüpft wird. Aber die Performance is richtig gut....
ja, man kann. Mit den Keys im dict ist ja nur eine Referen auf das dict
gespeichert, keine 'physische' Kopie. Das dict selbst via setdefault als
value zu setzen hat ja nur die Aufgabe, das dict jedsmal als Resultat der
Verknüpfung wieder zurück zu bekommen.
Ein dict zu benutzen, um sich wiederholende Elemente aus einer Liste zu
eliminieren, ist sicher der performanteste Weg und das mit reduce zu machen
die eleganteste ormulierung. Das Verfahren ist, wie man es oft auch in
typischem Lisp-Code nicht rein funktional sondern benutzt einen lokalen
Seiteneffekt auf dem dict, das ohnehin wieder verschwindet. Die klassische
imperative Variante
dict = {}
for v in values:
dict.setdefault (v, 1)
uniqValues = dict.keys ()
ist viel weitschweifiger und hat den Nachteil, dass ein dict übrigbleibt,
das eigentlich nur eine transitorische Funktion hat.
Schöner und konzeptionell klarer als die Variante mit reduce wäre das folgende
uniqValues = set (values).elements2list ()
aber das müsste ja demnächst gehen...
ciao, Rainer
>
>--tf
>
>
>
>_______________________________________________
>Python-de maillist - Python-de at starship.python.net
>http://starship.python.net/mailman/listinfo/python-de
>
>
Rainer Fischbach
______________________________________________________
ECS
Engineering Consulting & Solutions GmbH
Muehlstrasse 3
D-92318 Neumarkt
Phone: +49 (0)9181 - 4764-84
Fax: +49 (0)9181 - 4764-50
Mobile: +49 (0)171 - 41 41 570
e-mail: fischbach at ecs-gmbh.de
WWW: http://www.ecs-gmbh.de
______________________________________________________
More information about the Python-de
mailing list