Wann ist es besser, zip anstelle von izip zu verwenden?
Wann ist es besser, zip
statt itertools.izip
?
Kommentar zu dem Problem
Ein Grund, zugunsten von
zip
, zu offensichtlich, aber immer noch einen Hinweis Wert, ist, dass izip
gibt einen iterator
die kann befahren werden, nur einmal. d.h. in ii = izip(a,b) ; f(ii) ; g(ii)
, hier wird eine leere Liste []
an g
. InformationsquelleAutor der Frage Neil G | 2011-02-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie wissen, Sie wollen die vollständige Liste der items konstruiert (zum Beispiel für die übergabe an eine Funktion, die ändern würde, dass die Liste in-place). Oder, wenn Sie erzwingen möchten, dass die Argumente, die Sie übergeben haben, um
zip()
vollständig ausgewertet, bestimmte Zeitpunkt.InformationsquelleAutor der Antwort Amber
zip
berechnet die Liste auf einmalizip
berechnet die Elemente nur, wenn es angefordert wird.Ein wichtiger Unterschied ist, dass 'zip' gibt eine aktuelle Liste 'izip' gibt ein 'izip-Objekt', das ist nicht eine Liste und nicht die Liste der unterstützten-spezifische Funktionen (z.B. Indizierung):
So, wenn Sie eine Liste (ein nicht ein list-Objekt), nur 'zip'.
Abgesehen von diesem, 'izip' kann nützlich sein für das speichern von Speicher oder Zyklen.
E. g. der folgende code Mai Ausfahrt nach wenigen Zyklen, so gibt es keine Notwendigkeit zu berechnen, werden alle Elemente der kombinierten Liste:
mit
zip
würde berechnet haben alle(a, b)
Paare vor der Eingabe des Zyklus.Außerdem, wenn
lst_a
undlst_b
sind sehr groß (z.B. Millionen von Datensätzen),zip(a, b)
bauen eine Dritte Liste mit Doppel-Raum.Aber wenn man kleine Listen, vielleicht
zip
ist schneller.InformationsquelleAutor der Antwort Don
In der 2.x, wenn Sie müssen eine Liste statt einen iterator.
InformationsquelleAutor der Antwort Ignacio Vazquez-Abrams
Den itertools Bibliothek bietet die "Iteratoren" für common Python-Funktionen. Aus dem itertools-Doku "Wie zip (), außer dass es gibt einen iterator statt einer Liste." Die ich in izip() bedeutet "iterator".
Python Iteratoren sind ein "lazy geladen" - Sequenz, spart Speicher gegenüber herkömmlichen in-memory-Liste. So verwenden Sie itertools.izip(a, b), wenn die beiden Eingänge a, b sind zu groß, um es im Gedächtnis behalten.
Suchen die Python-Konzepte, die auf eine effiziente sequentielle Verarbeitung:
InformationsquelleAutor der Antwort Sakib Ahammed