Python has the map () and reduce () functions built into it.
If you read Google's famous paper "Mapreduce:simplified Data processing on Large Clusters", you can probably understand the concept of map/reduce.
Let's look at map first. The map () function receives two parameters, one is a function, the other is a sequence, and map passes the incoming function to each element of the sequence sequentially, returning the result as a new list.
For example, we have a function f (x) =x2, to function in a list [1, 2, 3, 4, 5, 6, 7, 8, 9], you can use map () to achieve the following:
Now, we use Python code to implement:
>>> def f (x): ... return x * x...>>> map (f, [1, 2, 3, 4, 5, 6, 7, 8, 9]) [1, 4, 9, 16, 25, 36, 49, 64, 81]
Map () The first parameter passed in is F, which is the function object itself.
You might think that you don't need the map () function, write a loop, or you can calculate the result:
L = []for n in [1, 2, 3, 4, 5, 6, 7, 8, 9]: l.append (f (n)) print L
Yes, but, from the loop code above, can you see "putting F (x) in every element of the list and generating a new list"?
So, as a higher-order function, map () actually abstracts the arithmetic rules, so we can not only calculate the simple f (x) =x2, but also calculate any complex function, for example, to convert all the list numbers to strings:
>>> map (str, [1, 2, 3, 4, 5, 6, 7, 8, 9]) [' 1 ', ' 2 ', ' 3 ', ' 4 ', ' 5 ', ' 6 ', ' 7 ', ' 8 ', ' 9 ']
Only one line of code is required.
Let's look at the usage of reduce. Reduce functions a function in a sequence [X1, x2, x3 ...] , the function must receive two parameters, and reduce calculates the result and the next element of the sequence, and the effect is:
Reduce (f, [X1, x2, X3, x4]) = f (f (f (x1, x2), x3), x4)
For example, to sum a sequence, it can be implemented with reduce:
>>> def add (x, y): ... return x + y...>>> reduce (add, [1, 3, 5, 7, 9]) 25
Of course, the sum operation can be built directly into the Python function sum (), no need to use reduce.
But if you want to transform the sequence [1, 3, 5, 7, 9] into integers 13579,reduce can come in handy:
>>> def fn (x, y): ... return x * + y...>>> reduce (FN, [1, 3, 5, 7, 9]) 13579
This example is not very useful in itself, but if you consider that the string str is also a sequence, with a slight change to the above example, with map (), we can write the function that converts str to int:
>>> def fn (x, y): ... return x * + y...>>> def char2num (s): ... return {' 0 ': 0, ' 1 ': 1, ' 2 ': 2, ' 3 ': 3, ' 4 ': 4, ' 5 ': 5, ' 6 ': 6, ' 7 ': 7, ' 8 ': 9}[s]...>>> reduce (FN, map (c Har2num, ' 13579 ')) 13579
The function that is organized into a str2int is:
def str2int (s): def fn (x, y): return x * + y def char2num (s): return {' 0 ': 0, ' 1 ': 1, ' 2 ': 2, ' 3 ': 3, ' 4 ': 4, ' 5 ': 5, ' 6 ': 6, ' 7 ': 7, ' 8 ': 8, ' 9 ': 9}[s] return reduce (FN, map (Char2num, s))
You can also use lambda functions to further simplify:
def char2num (s): return {' 0 ': 0, ' 1 ': 1, ' 2 ': 2, ' 3 ': 3, ' 4 ': 4, ' 5 ': 5, ' 6 ': 6, ' 7 ': 7, ' 8 ': 9}[s]
def str2int (s): return reduce (lambda x,y:x*10+y, map (Char2num, s))
That is, assuming that Python does not provide an int () function, you can write a function that converts the string to an integer by itself, and only requires a few lines of code!
Practice
Using the map () function, the nonstandard English name entered by the user becomes the first letter capitalized, and the other lowercase canonical names. Input: [' Adam ', ' Lisa ', ' Bart '], output: [' Adam ', ' Lisa ', ' Bart '].
The sum () function provided by Python can accept a list and sum, write a prod () function that accepts a list and uses the reduce () to calculate the product.