AW: AW: [Spam 42,42%] [Python-de] Listenvergleich
Hallo Harald
hier sollte WENIGSTENS aus ls1 ein set gemacht werden... import sets def contains (ls1, ls2): sls1=sets.Set(ls1) for e in ls2: if e not in sls1: return False return True
(dabei natürlich darauf achten, daß ls1 die länger der beiden Listen ist.
a in b ist O(n) wenn b eine Liste ist, und O(1) wenn B ein Set oder ein Dict ist.
noch fixer ist allerdings import sets def contains (ls1, ls2): return sets.Set(ls1).intersection(ls2)
damit kommt eine Menge der gemeinsamen Elemente zurück... dann mit len prüfen oder direkt die gemeinsamen verwenden.
sets ist mein Lieblingsmodul :))) Harald
ich mag die sets ja auch und sicher geht der in-Test mit sets schneller. Aber: 1. nicht jede Liste lässt sich in ein set verwandeln (die Elemente müssen hashable sein) 2. die Umwandlung in ein set kostet auch etwas (Zeit und Speicher) ich würde die Listen deshalb nicht lokal innerhalb der Testfunktion umwandeln, was dazu führen kann, dass man dieselbe Liste x-mal in ein set verwandelt, sondern, wenn ich weiß, dass die fraglichen Listen nur hashable Elemente enthalten, zuerst die Listen in sets umwandeln und dann mit diesen weiterarbeiten. Rainer _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
Hallo,
ich mag die sets ja auch und sicher geht der in-Test mit sets schneller.
Aber:
1. nicht jede Liste lässt sich in ein set verwandeln (die Elemente müssen hashable sein)
Naja, aber welches Objekt ist das nicht? Falls das wirklich problematisch wird, kann man da immer noch was anderes machen - aber mit demselben Argument waere ja auch der Einsatz von Dict's grundsaetzlich fraglich - praktisch aber nicht.
2. die Umwandlung in ein set kostet auch etwas (Zeit und Speicher)
Die Zeit ist aber immer noch besser als beim simplen quadratischen Suchen.
ich würde die Listen deshalb nicht lokal innerhalb der Testfunktion umwandeln, was dazu führen kann, dass man dieselbe Liste x-mal in ein set verwandelt, sondern, wenn ich weiß, dass die fraglichen Listen nur hashable Elemente enthalten, zuerst die Listen in sets umwandeln und dann mit diesen weiterarbeiten.
Richtig. MfG Diez _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
participants (2)
-
Diez B. Roggisch
-
Rainer Fischbach