Iteration Superpowers with `itertools`
Standard Library
itertools Recipes
`itertools` provides composable building blocks for iterating over data without materializing huge lists.
Recipes
| Pattern | Snippet | Use case |
|---|---|---|
itertools.chain | chain(list_a, list_b) | Concatenate iterables lazily |
itertools.islice | islice(stream, 10) | Grab first N items |
itertools.cycle | cycle(['red', 'blue']) | Repeat pattern |
itertools.groupby | see below | Group sorted data |
itertools.pairwise (3.10+) | pairwise(points) | Adjacent pairs |
itertools.permutations/combinations | combinations(users, 2) | Combinatorics |
from itertools import groupby
orders.sort(key=lambda o: o.customer_id)
for cust_id, items in groupby(orders, key=lambda o: o.customer_id):
process(cust_id, list(items))
Patterns
- Build sliding windows with
deque+islice. - Combine with
functoolsto memoize expensive iterators. - Offload CPU-heavy combinations to multiprocessing when datasets are large.