'Getting the next element of a list on a function call

Is there a way to return the next element in a list on a function call, this is what I have tried so far:

from itertools import cycle
def get_next_element():
    lst = [1, 2, 3, 4]
    cycle_list = cycle(lst)
    return next(cycle_list)

Now when I call the above function:

while True:
    x = get_next_element() # x should return 1, 2, 3

But x is always returned as 1 every time the function is called within the loop.



Solution 1:[1]

You could subclass cycle in order to make it callable.

from itertools import cycle

class mycycle(cycle):
    def __call__(self):
        return next(self)

Demo:

>>> get_next_element = mycycle([1, 2, 3])
>>> get_next_element()
1
>>> get_next_element()
2
>>> get_next_element()
3
>>> get_next_element()
1

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 timgeb