ループの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 で一緒に回してあげるだけ。