Circular list iterator in Python
I need to iterate over a circular list, possibly many times, each time starting with the last visited item.
The use case is a connection pool. A client asks for connection, an iterator checks if pointed-to connection is available and returns it, otherwise loops until it finds one that is available.
Is there a neat way to do it in Python?
itertools.cycle, that's its exact purpose:
from itertools import cycle lst = ['a', 'b', 'c'] pool = cycle(lst) for item in pool: print item,
a b c a b c ...
(Loops forever, obviously)
In order to manually advance the iterator and pull values from it one by one, simply call
>>> next(pool) 'a' >>> next(pool) 'b'