一. Map函数原理
map()方法会将一个函数f(x)映射到序列的每一个元素上,生成新序列,包含所有函数返回值。
再上图的例子中,函数
f
(
x
)
=
x
2
f(x)=x^2
f(x)=x2将序列
[
1
,
2
,
3
,
4
,
5
,
6
,
7
,
8
,
9
]
[1,2,3,4,5,6,7,8,9]
[1,2,3,4,5,6,7,8,9]映射到
[
1
,
4
,
9
,
16
,
25
,
36
,
49
,
64
,
81
]
[1,4,9,16,25,36,49,64,81]
[1,4,9,16,25,36,49,64,81]。
代码解析:
- 使用Lambda函数实现
list = [1, 2, 3, 4, 5]
output = list(map(lambda x: x**2, list))
- 使用自定义平方函数实现
list = [1, 2, 3, 4, 5]
def f(x):
return x**2
output = list(map(f, list))
由此可以看出map的函数定义:map(函数, list)
我们不但可以计算简单的f(x)=x2,还可以计算任意复杂的函数,比如,把这个list所有数字转为字符串:
>>> list(map(str, [1, 2, 3, 4, 5, 6, 7, 8, 9]))
输出:[‘1’, ‘2’, ‘3’, ‘4’, ‘5’, ‘6’, ‘7’, ‘8’, ‘9’]
二. Reduce函数原理
reduce的工作过程是 :在迭代序列的过程中,首先把前两个元素(只能两个)传给函数,函数加工后,然后把得到的结果和第三个元素作为两个参数传给函数参数, 函数加工后得到的结果又和第四个元素 作为两个参数传给函数参数,依次类推。
举例:
reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)
给定函数 f ( x , y ) = x + y f(x,y)=x+y f(x,y)=x+y和参数列表 [ 1 , 2 , 3 , 4 , 5 ] [1, 2, 3, 4, 5] [1,2,3,4,5]。返回值为15, 过程为 ( ( ( ( 1 + 2 ) + 3 ) + 4 ) + 5 ) = 15 ((((1+2)+3)+4)+5) = 15 ((((1+2)+3)+4)+5)=15
代码举例:
- 使用Lambda函数实现
from functools import reduce
result = reduce(lambda x, y: x+y, [1, 2, 3, 4, 5])
print(result)
- 使用自定义平方函数实现
from functools import reduce
def func(x,y):
return x*y
result = reduce(func, [1, 2, 3, 4, 5])
print(result)
注意:reduce不可以直接使用,需要用from functools import reduce导入
reduce的函数定义:
reduce(function, sequence[, initial]) -> value
如果提供初始值initial的话,会以sequence中的第一个元素和initial作为参数调用function,否则会以序列sequence中的前两个元素做参数调用function。
- 提供initial:
reduce(lambda x, y: x + y, [2, 3, 4, 5, 6], 1)
输出值:21 ( (((((1+2)+3)+4)+5)+6) )
- 未提供initial:
reduce(lambda x, y: x + y, [2, 3, 4, 5, 6])
输出值:20 ( (((((2+3)+4)+5)+6) )