[Python] イテレータをfor文で2回以上使う方法

自由が丘で働くWeb屋のブログ

[Python] イテレータをfor文で2回以上使う方法

[Python] イテレータをfor文で2回以上使う方法

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)
 
カテゴリー:Webシステム開発
タグ:
2013年3月19日 06時33分
 

関連記事

 

コメントを書く

(C) 自由が丘で働くWeb屋のブログ