23.2. Map¶
You previously were introduced to accumulating a list by transforming each of the elements. Here we revisit that pattern.
The following function produces a new list with each item in the original list doubled. It is an example of a mapping, from the original list to a new list of the same length, where each element is doubled.
The doubleStuff function is an example of the accumulator pattern, in particular the mapping pattern. On line 3,
new_list
is initialized. On line 5, the doubled value for the current item is produced and on line 6 it is appended to
the list we’re accumulating. Line 7 executes after we’ve processed all the items in the original list: it returns the
new_list
. Once again, codelens helps us to see the actual references and objects as they are passed and returned.
This pattern of computation is so common that python offers a more general way to do mappings, the map
function, that
makes it more clear what the overall structure of the computation is. map
takes two arguments, a function and a
sequence. The function is the mapper that transforms items. It is automatically applied to each item in the sequence. You
don’t have to initialize an accumulator or iterate with a for loop at all.
Note
Technically, in a proper Python 3 interpreter, the map
function produces an “iterator”, which is like a list but
produces the items as they are needed. Most places in Python where you can use a list (e.g., in a for loop) you can
use an “iterator” as if it was actually a list. So you probably won’t ever notice the difference. If you ever really
need a list, you can explicitly turn the output of map into a list: list(map(...))
. In the runestone environment, map
actually returns a real list, but to make this code compatible with a full python environment, we always convert it to a list.
As we did when passing a function as a parameter to the sorted
function, we can specify a function to pass to map
either by referring to a function by name, or by providing a lambda expression.
Of course, once we get used to using the map
function, it’s no longer necessary to define functions like
tripleStuff
and quadrupleStuff
.
Check Your Understanding
1. Using map, create a list assigned to the variable greeting_doubled
that doubles each element in the list lst
.
2. Below, we have provided a list of strings called abbrevs
. Use map to produce a new list called abbrevs_upper
that contains all the same strings in upper case.