Wenn Sie izip aus dem itertools-Modul importieren, erhalten Sie NameError in Python 3.x.


71

Ich versuche das izip-Modul folgendermaßen zu importieren:

from itertools import izip

Nach der kürzlich erfolgten Umstellung von Python 2.7 auf 3 scheint dies jedoch nicht zu funktionieren.

Ich versuche in eine CSV-Datei zu schreiben:

writer.writerows(izip(variable1,2))

Aber ich habe kein Glück. Immer noch auf einen Fehler stoßen.

Antworten:


81

In Python 3 ziperledigt das eingebaute den gleichen Job wie itertools.izipin 2.X (gibt einen Iterator anstelle einer Liste zurück). Die zipImplementierung wurde fast vollständig von der altenizip kopiert , nur ein paar Namen wurden geändert und die Pickle-Unterstützung wurde hinzugefügt.

Hier ist ein Benchmark zwischen zipPython 2 und 3 und izipPython 2:

Python 2.7 :

from timeit import timeit

print(timeit('list(izip(xrange(100), xrange(100)))',
             'from itertools import izip',
             number=500000))

print(timeit('zip(xrange(100), xrange(100))', number=500000))

Ausgabe:

1.9288790226
1.2828938961

Python 3 :

from timeit import timeit

print(timeit('list(zip(range(100), range(100)))', number=500000))

Ausgabe:

1.7653984297066927

In diesem Fall zipkönnen Sie 2 nicht als Argument verwenden, da die Argumente die Iteration unterstützen müssen. Wenn Sie also 2 Variablen als CSV-Zeile schreiben möchten, können Sie sie in ein Tupel oder eine Liste einfügen:

writer.writerows((variable1,2))

itertoolsSie können auch von zip_longestals flexiblere Funktion importieren, die Sie auf Iteratoren mit unterschiedlicher Größe verwenden können.


aargh - anscheinend verstehe ich Bearbeitungsfristen nicht so gut wie ich dachte. Jetzt sind die Bearbeitungsprotokolle verwirrend
user2357112 unterstützt Monica

22

Einer der Wege, die mir geholfen haben, ist:

try:
    from itertools import izip as zip
except ImportError: # will be 3.x series
    pass

15

Verwenden Sie zipstatt izipdirekt in Python 3, müssen Sie nichts importieren.

Für einen weiteren Besuch hier .


1
Für was weiter ? :)
Bers

Zum besseren Verständnis und zum Betrachten des Patches, in dem er behoben wurde. Vielleicht ein guter Weg. @bers
SilentFlame
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.