Helper method for looping through the previous, current and next value of an iterable
from itertools import zip, tee, chain, islice
def prev_curr_next(iterable):
prev, curr, nxt = tee(iterable, 3)
prev = chain([None], prev)
nxt = chain(islice(nxt, 1, None), [None])
return zip(prev, curr, nxt)
"""
Usage:
for prev, curr, nxt in prev_curr_next('abcde'):
print prev, curr, nxt
Output:
prev None curr a next b
prev a curr b next c
prev b curr c next d
prev c curr d next e
prev d curr e next None
"""