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

Popular posts from this blog

Are Regular VACUUM ANALYZE Still Recommended Under 9.1?

Can Feynman Diagrams Be Used To Represent Any Perturbation Theory?