Pythonのzipとizipの違い
zipは以前ちょっと書いたけど、複数のシーケンスに並行して同時にアクセスするforループを書くのに便利。
http://d.hatena.ne.jp/yuheiomori0718/20120626/1340721471
# coding=utf-8 seq1 = [1,2,3,4,5] seq2 = ['a','b','c','d','e'] for n, a in zip(seq1, seq2): print n, a # 1 a # 2 b # 3 c # 4 d # 5 e
itertools.izipも実行結果は全く同じに見える
# coding=utf-8 from itertools import izip seq1 = [1,2,3,4,5] seq2 = ['a','b','c','d','e'] for n, a in izip(seq1, seq2): print n, a # 1 a # 2 b # 3 c # 4 d # 5 e
違いは、zipがリストを返すのに対し、izipはイテレータを返す点。
上記の例でseq1、seq2が非常に大きいリストであるとすると、zipは呼び出したタイミングで、seq1、2と同じサイズのタプルのリストを作成するので、かなりメモリを消費するのに対し、izipはメモリ消費が少なくてすみます。
こう書くとzipのメリットが全然ないような気がするんですが、、調べてみたらPython3ではitertools.izipが無くなり、zipがイテレータを返すようになるみたいですね。
参考)
python2 zip
http://docs.python.org/library/functions.html#zip
python3 zip
http://docs.python.org/release/3.1.5/library/functions.html#zip