ループのprev, curr, succの要素の取り出し
>>> from itertools import * >>> a = [1,2,3,4] >>> prevs = chain([None], a) >>> succs = chain(islice(a, 1, len(a)), [None]) >>> for prev,curr,succ in izip(prevs, a, succs): >>> print prev, curr, succ None 1 2 1 2 3 2 3 4 3 4 None
Rubyだと結構大変みたいだが、Pythonだとあっさりできる。ポイントは izip で、zip 系の関数は一番短い長さのリストに合わせてくれるので、上記の prevs と succs も自動的に a の長さに合わてくれる。つまり、要素を1つづつ前後にずらしたリストを chain して izip で一緒に回してあげるだけ。