Getting the nth element of any iterable
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.
How to do it...
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
How it works...
The itertools.islice
function is able to take a slice of any iterable. In our specific case, we want...