web-dev-qa-db-ja.com

itertoolsモジュールからizipをインポートすると、Python 3.xでNameErrorが発生します

私は次のようにizipモジュールをインポートしようとしています:

from itertools import izip

ただし、最近Python 2.7から3に切り替えた後、機能していないようです。

私はcsvファイルに書き込もうとしています:

writer.writerows(izip(variable1,2))

しかし、私には運がありません。それでもエラーが発生します。

54
iAmNewToPYTHON

Python 3では、ビルトインZipは2.Xのitertools.izipと同じ仕事をします(リストの代わりにイテレーターを返します)。 Zipの実装 は、 old izip からほぼ完全にコピーアンドペーストされ、いくつかの名前が変更され、ピクルのサポートが追加されています。

Python 2および3のZipとPython 2のizipの間のベンチマークは次のとおりです。

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))

出力:

1.9288790226
1.2828938961

Python

from timeit import timeit

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

出力:

1.7653984297066927

この場合、Zipの引数は反復をサポートする必要があるため、2を引数として使用することはできません。したがって、2つの変数をCSV行として書き込みたい場合は、それらをタプルまたはリストに入れることができます。

writer.writerows((variable1,2))

また、itertoolsから、Zip_longestをより柔軟な関数としてインポートして、異なるサイズのイテレーターで使用できます。

66
Kasrâmvd

私を助けた方法の1つは:

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

python 3で直接Zipの代わりにizipを使用し、何もインポートする必要はありません。

詳細については、 こちら をご覧ください。

9
SilentFlame