Wann ist es besser, Zip statt izip zu benutzen?

Wann ist es besser, zip anstelle von itertools.izip zu benutzen?

4 Solutions collect form web for “Wann ist es besser, Zip statt izip zu benutzen?”

Wenn Sie wissen, dass Sie die vollständige Liste der konstruierten Gegenstände wünschen (z. B. für die Übergabe an eine Funktion, die diese Liste an Ort und Stelle ändern würde). Oder wenn du die Argumente erzwingen willst, die du an zip() , um an diesem Punkt vollständig ausgewertet zu werden.

zip berechnet alle Liste auf einmal, izip berechnet die Elemente nur, wenn angefordert.

Ein wichtiger Unterschied ist, dass 'zip' eine aktuelle Liste zurückgibt, 'izip' gibt ein 'izip-Objekt' zurück, das keine Liste ist und keine lordspezifischen Features (wie zB Indizierung) unterstützt:

 >>> l1 = [1, 2, 3, 4, 5, 6] >>> l2 = [2, 3, 4, 5, 6, 7] >>> z = zip(l1, l2) >>> iz = izip(l1, l2) >>> isinstance(zip(l1, l2), list) True >>> isinstance(izip(l1, l2), list) False >>> z[::2] #Get odd places [(1, 2), (3, 4), (5, 6)] >>> iz[::2] #Same with izip Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'itertools.izip' object is unsubscriptable 

Also, wenn du eine Liste brauchst (ein nicht ein listähnliches Objekt), benutze einfach 'zip'.

Abgesehen davon kann 'izip' nützlich sein, um Speicher oder Zyklen zu speichern.

ZB kann der folgende Code nach wenigen Zyklen beenden, also gibt es keine Notwendigkeit, alle Elemente der kombinierten Liste zu berechnen:

 lst_a = ... #list with very large number of items lst_b = ... #list with very large number of items #At each cycle, the next couple is provided for a, b in izip(lst_a, lst_b): if a == b: break print a 

Mit zip hätte alle (a, b) Paare vor dem Betreten des Zyklus berechnet.

Wenn lst_a und lst_b sehr groß sind (zB Millionen von Datensätzen), wird zip(a, b) eine dritte Liste mit doppeltem Raum aufbauen.

Aber wenn Sie kleine Listen haben, vielleicht ist zip schneller.

In 2.x, wenn du eine Liste anstelle eines Iterators benötigst.

Die itertools-Bibliothek bietet "Iteratoren" für gemeinsame Python-Funktionen. Von den itertools docs, "Like zip () außer dass es einen Iterator anstelle einer Liste zurückgibt." Das I in izip () bedeutet "Iterator".

Python-Iteratoren sind eine "faul geladene" Sequenz, die Speicher über eine regelmäßige In-Memory-Liste speichert. Also, du würdest itertools.izip (a, b) verwenden, wenn die beiden Eingänge a, b zu groß sind, um auf einmal im Speicher zu bleiben.

Schauen Sie sich die Python-Konzepte im Zusammenhang mit effizienter sequentieller Verarbeitung an:

 "generators" & "yield" "iterators" "lazy loading" 
  • Export von MBOX-Betreff und Datum zu CSV mit Python
  • Fehler: [Errno 32] Zerbrochenes Rohr
  • PyQt GUI Reihenfolge der Operationen
  • Tkinter Leinwand create_window ()
  • ImportError: Kein Modul namens django.core.management bei der Verwendung von manage.py
  • Wie erstelle ich ein Menü und Untermenüs in Python-Flüchen?
  • Lesen einer Binärdatei mit Memoryview
  • Schreiben einer Funktion zum Umwandeln von Hex in Dezimal
  • Finde gemeinsamen Teilstring zwischen zwei Strings
  • Getting "newline inside string" beim Lesen der CSV-Datei in Python?
  • ImportError: Kein Modul mit dem Namen _imagingtk
  • Python ist die beste Programmiersprache der Welt.