grouperと微妙に違うバージョン
Python2.6でitertoolsは、ライブラリ本体だけでなく、
ドキュメントのexampleにも関数が追加されています。
その一つがgrouperで、grouperは値を指定した個数毎にまとめたリストを返しますが、
半端をNoneで埋めるのが気に入らないので、単に小さいリストを返す関数を作りました。
from itertools import * def grouper(n, iterable, fillvalue=None): "grouper(3, 'ABCDEFG', 'x') --> ABC DEF Gxx" args = [iter(iterable)] * n return izip_longest(fillvalue=fillvalue, *args) def take(n, iterable): "Return first n items of the iterable as a list" return list(islice(iterable, n)) def grouper2(n, iterable): iterable = iter(iterable) x = take(n, iterable) while x: yield x x = take(n, iterable)
もっといい書き方があるような気もします。というか、いっそ標準で添付して欲しいです。
ちなみにgrouper2を作ったのは、wxPython製のソフトで大量のファイル名を操作するとき、
適当な頻度でwxApp::Yieldを呼ばないとウィンドウが固まるからです。
こっちもgrouper2を使うよりいい解決法がある気がします。