平方数の無限リスト(っぽいもの)を作る

itertoolsモジュールのcountを使えば整数を無限に生成できる。countを使って例えば平方数を無限に生成しようとする。ビルトインのmapは有限のシーケンスに対してのみ動作するので、要素数に限りがないcountに適用することはできない。このような場合にはitertoolsの他の関数が役に立つ。

import itertools
squares = itertools.imap(lambda x:x*x, itertools.count(1))

# 使用例:10000以下の平方数のリストを作る
print list(itertools.takewhile(lambda n:n<10000, squares))

今回使用したimapやtakewhileを含め、itertoolsの関数の多くはiterableなオブジェクトを返すだけなので、特定要素に複数回アクセスする場合などはlistやtupleで実体化する必要があるので注意。