In this chapter, we will cover the following recipes:
- Searching, sorting, filtering—high-performance searching in sorted containers
 - Getting the nth element of any iterable—grabbing the nth element of any iterable, generators too
 - Grouping similar items—splitting an iterable into groups of similar items
 - Zipping—merging together data from multiple iterables into a single iterable
 - Flattening a list of lists—converting a list of lists into a flat list
 - Producing permutations and—computing all possible permutations of a set of elements
 - Accumulating and reducing—applying binary functions to iterables
 - Memoizing—speeding up computation by caching functions
 - Operators to functions—how to keep references to callables for a Python operator
 - Partials—reducing the number of arguments of a function by preapplying...