Randomly accessing to containers is something we are used to doing frequently and without too many issues. For most container types, it's even a very cheap operation. When working with generic iterables and generators on the other side, it's not as easy as we would expect and it often ends up with us converting them to lists or ugly for
loops.
The Python standard library actually has ways to make this very straightforward.
The itertools
module is a treasure of valuable functions when working with iterables, and with minor effort it's possible to get the nth item of any iterable:
import itertools def iter_nth(iterable, nth): return next(itertools.islice(iterable, nth, nth+1))
Given a random iterable, we can use it to grab the element we want:
>>> values = (x for x in range(10))
>>> iter_nth(values, 4)
4