enumerateの代わりにitertoolsを使ってみる
itertoolsのについてメモ -- 似非言語オタクの戯言 http://d.hatena.ne.jp/aitahoge/20110517/1305611498
この記事を読んでいて気づいたこと。
count(start=0, step=1) 名前のとおり、next()が呼び出される度にカウントされる。 izip()との併用とか、enumerateが使いにくいケースに良いと思われ。
なるほど。
- 今までわざわざカウンターを書いていたが必要ない。itertools.countを素直に使うべき。
- enumerate関数が必ず0から始まるので、1から始めたい場合などはitertools.izipと組み合わせて使う。
サンプル::
# -*- coding:utf-8 -*- import itertools def main(): # 2ずつステップ odds = itertools.count(1, 2) print(odds.next()) #=> 1 print(odds.next()) #=> 3 print(odds.next()) #=> 5 for i, j in itertools.izip(itertools.count(1), [1, 2, 3]): print(i, j, i * j) #=> (1, 1, 1) #=> (2, 2, 4) #=> (3, 3, 9) if __name__ == "__main__": main()
注意点としては、itertools.countにstep引数を渡せるのはpython2.7以降のようだ。
2.6系のpythonでやろうとしたら引数が多すぎるというエラーになった。