The itertools module provides a number of functions that we can use to produce finite sequences of values. We'll look at 10 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 fill value.
- 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.