Circular list iterator in Python

Circular list iterator in Python

Use itertools.cycle, thats 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, lets assume that library function doesnt 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
#....

Circular list iterator in Python

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

Leave a Reply

Your email address will not be published. Required fields are marked *