
Ab Python 2.2: neueliste = [ x[0] for x in alteliste ]
Danke!
Ab Python 2.4 auch al Generator: neueliste = ( x[0] for x in alteliste )
Leider muss es auch mit Python 2.3 laufen. Eigentlich verstehe ich auch den Sinn der Generatoren nicht. Sind sie schneller/effektiver als die anderen Konstrukte? Grüße vom Südsee! Henning Hraban Ramm Südkurier Medienhaus / MediaPro Systembetreuung / Systementwicklung _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de

Henning, Eigentlich verstehe ich auch den Sinn der Generatoren nicht.
Sind sie schneller/effektiver als die anderen Konstrukte?
Eine List-Comprehension erzeugt eine Liste im Speicher. Für jedes Element in der Liste wird Speicher angefordert. Ein Generator lebt "von der Hand in den Mund", es wird also immer nur das Objekt _generiert_, daß der Consumer gerade braucht. also sum([listkomprehension]) listkomprehension wird vollständig berechnet und im Speicher alloziert, dann wird sum darauf ausgeführt sum(generatorexpression) es wird das erste Ergebnis erzeugt, an sum gegeben; sum addiert auf und fragt: "mehr?" somit: generator-Expressions verbraten im allgemeinen weniger Speicher Gruß HArald -- GHUM Harald Massa persuasion python postgresql Harald Armin Massa Reinsburgstraße 202b 70197 Stuttgart 0173/9409607 _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de

Henning.Ramm@mediapro-gmbh.de schrieb:
Eigentlich verstehe ich auch den Sinn der Generatoren nicht. Sind sie schneller/effektiver als die anderen Konstrukte?
Sind bei großen Datenmengen effizienter, da nicht erst die ganze Liste aufgebaut wird, sondern immer ein Element nach dem anderen geliefert wird. Beispiel: Man möchte ein Logfile mit 3 MB (das ist eher noch gering) zeilenweise auswerten. Dazu wird jeder Logeintrag erstmal in ein paar Teile zerlegt, z.B. Datum, Server, Subsystem, Meldung. for date, server, subsys, text in readlogfile(): ... readlogfile() kapselt hier das Lesen des Logfiles. Würde readligfile() eine Liste liefern, hätte man eine *riesiege* Liste. Der Speicherverbrauch würde proportional zur Länge des Logfile wachsen -- das will man nicht. Implementiert man readlogfile() als Generator, dann wird eine solche Liste gar nicht erst aufgebaut. Der Speicherverbrauch belibt gering (und konstant). -- Schönen Gruß - Regards Hartmut Goebel | Hartmut Goebel | IT-Security -- effizient | | h.goebel@goebel-consult.de | www.goebel-consult.de | _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
participants (3)
-
Harald Armin Massa
-
Hartmut Goebel
-
Henning.Ramm@mediapro-gmbh.de