Circular List Iterator In Python
Answer :
Use itertools.cycle, that's its exact purpose:
from itertools import cycle lst = ['a', 'b', 'c'] pool = cycle(lst) for item in pool: print item, Output:
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):
>>> next(pool) 'a' >>> next(pool) 'b' The correct answer is to use itertools.cycle. But, let's assume that library function doesn't exist. How would you implement it?
Use a generator:
def circular(): while True: for connection in ['a', 'b', 'c']: yield connection Then, you can either use a for statement to iterate infinitely, or you can call next() to get the single next value from the generator iterator:
connections = circular() next(connections) # 'a' next(connections) # 'b' next(connections) # 'c' next(connections) # 'a' next(connections) # 'b' next(connections) # 'c' next(connections) # 'a' #.... Or you can do like this:
conn = ['a', 'b', 'c', 'd', 'e', 'f'] conn_len = len(conn) index = 0 while True: print(conn[index]) index = (index + 1) % conn_len prints a b c d e f a b c... forever
Comments
Post a Comment