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:
The code is as follows:
>>> 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:
The code is as follows:
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:
The code is as follows:
>>> 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:
The code is as follows:
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:
The code is as follows:
>>> 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:
The code is as follows:
>>> def fn (x, y):
... return x * ten + 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:
The code is as follows:
>>> def fn (x, y):
... return x * ten + 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]
...
>>> reduce (FN, map (char2num, ' 13579 '))
13579
The function that is organized into a str2int is:
The code is as follows:
def str2int (s):
DEF fn (x, y):
return x * ten + y
def char2num (s):
return {' 0 ': 0, ' 1 ': 1, ' 2 ': 2, ' 3 ': 3, ' 4 ': 4, ' 5 ': 5, ' 6 ': 6, ' 7 ': 7, ' 8 ': 9}[s]
Return reduce (FN, map (Char2num, s))
You can also use lambda functions to further simplify:
The code is as follows:
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!