Welcome, guest | Sign In | My Account | Store | Cart
def cycle(seq):
    """Return a generator producing items from seq. When seq is
    exhausted, the generator will cycle over from item 0 again.

    Beware that a break statement is necessary in a for loop. Also, seq
    is a sequence supporting the len function and enumerated 0-based.

    Examples:

    >>> seq = ['one', 'two', 'three']
    >>> cyc = cycle(seq)
    >>> next(cyc)
    'one'
    >>> next(cyc)
    'two'
    >>> next(cyc)
    'three'
    >>> next(cyc)
    'one'
    >>> next(cyc)
    'two'

    To reset, call for a new cycle:

    >>> cyc = cycle(seq)
    >>> next(cyc)
    'one'
    >>> for i, item in enumerate(cyc):
    ...     print i, item
    ...     if i > 3:
    ...         break # Must break out manually
    ... 
    0 two
    1 three
    2 one
    3 two
    4 three

    """
    i = 0
    while True:                 # Cycle forever
        yield seq[i]
        i = (i + 1) % len(seq)

if __name__ == '__main__':
    import doctest
    doctest.testmod()

History