Chapter 8
Using the finite iterators
The itertools module provides a number of functions that we can use to produce
finite sequences of values. We'll look at ten functions in this module, plus some
related built-in functions:
- enumerate(): This function is actually part of the builtins package,
but it works with an iterator and is very similar to other functions in the
itertools module. - accumulate(): This function returns a sequence of reductions of the input
iterable. It's a higher-order function and can do a variety of clever calculations. - chain(): This function combines multiple iterables serially.
- groupby(): This function uses a function to decompose a single iterable into
a sequence of iterables over subsets of the input data. - zip_longest(): This function combines elements from multiple iterables.
The built-in zip() function truncates the sequence at the length of the
shortest iterable. The zip_longest() function pads the shorter iterables
with the given fillvalue. - compress(): This function filters one iterable based on a second iterable
of Boolean values. - islice(): This function is the equivalent of a slice of a sequence when
applied to an iterable. - dropwhile() and takewhile(): Both of these functions use a Boolean
function to filter items from an iterable. Unlike filter() or filterfalse(),
these functions rely on a single True or False value to change their filter
behavior for all subsequent values. - filterfalse(): This function applies a filter function to an iterable.
This complements the built-in filter() function. - starmap(): This function maps a function to an iterable sequence of tuples
using each iterable as an *args argument to the given function. The map()
function does a similar thing using multiple parallel iterables.
We've grouped these functions into approximate categories. The categories are
roughly related to concepts of restructuring an iterable, filtering, and mapping.