In previous chapters, we've looked at several related kinds of processing designs; some of them are as follows:
- Mapping and filtering, which creates collections from collections
- Reductions that create a scalar value from a collection
The distinction is exemplified by functions such as map() and filter() that accomplish the first kind of collection processing. There are several specialized reduction functions, which include min(), max(), len(), and sum(). There's a general-purpose reduction function as well, functools.reduce().
We'll also consider a collections.Counter() function as a kind of reduction operator. It doesn't produce a single scalar value per se, but it does create a new organization of the data that eliminates some of the original structure. At heart, it's a kind of count-group-by operation that has more in common...