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 with a counting reduction than with a mapping.
In this chapter, we'll look at reduction functions in more detail. From a purely functional...