web-dev-qa-db-fra.com

importer izip depuis le module itertools donne NameError dans Python 3.x

J'essaie d'importer le module izip comme suit:

from itertools import izip

Cependant, après le passage récent de Python 2.7 à 3 - cela ne semble pas fonctionner.

J'essaie d'écrire dans un fichier csv:

writer.writerows(izip(variable1,2))

Mais je n'ai pas de chance. Encore rencontrer une erreur.

54
iAmNewToPYTHON

Dans Python 3, le paramètre Zip intégré effectue le même travail que itertools.izip Dans 2.X (renvoie un itérateur au lieu d'une liste). Zip implémentation est presque complètement copié-collé à partir de ancien izip , avec seulement quelques noms modifiés et le support de pickle ajouté.

Voici un point de repère entre Zip dans Python 2 et 3 et izip dans Python 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))

Sortie:

1.9288790226
1.2828938961

Python :

from timeit import timeit

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

Sortie:

1.7653984297066927

Dans ce cas, puisque les arguments de Zip doivent supporter l'itération, vous ne pouvez pas utiliser 2 comme argument. Donc, si vous voulez écrire 2 variables sous la forme d'une ligne CSV, vous pouvez les mettre dans un tuple ou une liste:

writer.writerows((variable1,2))

Également à partir de itertools, vous pouvez importer Zip_longest En tant que fonction plus flexible que vous pouvez utiliser sur des itérateurs de taille différente.

66
Kasrâmvd

Une des manières qui m'a aidé est:

try:
    from itertools import izip as Zip
except ImportError: # will be 3.x series
    pass
14
Vasyl Lyashkevych

Utilisez Zip au lieu de izip directement dans python 3, inutile d'importer quoi que ce soit.

Pour une visite ultérieure ici .

9
SilentFlame