Pythonでイテレータをfor文などで回すと、for文によってイテレータの最後まで達する為、2回目にfor文を利用しても何も表示されません。
Pythonのイテレータをfor文で2回以上使う方法は以下から。
イテレータをfor文で2回以上使う方法
イテレータの元の値を再度呼び出す方法もありますが、今回はイテレータのコピーを作成して対応してみます。
#itertoolsをインポートする import itertools #イテレータの作成 hoge = iter(['one', 'two', 'three']) #イテレータのコピー #itertools.tee(iterable[, n=2]) オプション未指定の場合は『2』 moge,fuga = itertools.tee(hoge) #mogeのループ1回目(one,two,threeが表示される) for moge_data in moge: print moge_data #mogeのループ2回目(既に1度ループしているので何も表示されない) for moge_data in moge: print moge_data #fugaのループ1回目(one,two,threeが表示される) for fuga_data in fuga: print fuga_data
『itertools.tee()』は、ひとつのイテレータから独立したn個(デフォルトでは2個)のイテレータを返します。
上記例ではイテレータ『hoge』から『hoge』と『fuga』という独立したイテレータが作られています。
独立した3個のイテレータを生成したい場合は、オプションに『3』を指定します。
#itertoolsをインポートする import itertools #イテレータの作成 #itertools.tee(iterable[, n=2]) hoge = iter(['one', 'two', 'three']) #イテレータのコピー moge,fuga,piyo = itertools.tee(hoge, 3)
コメント