reduce
就是对序列中的元素进行累计操作
>>> reduce(lambda x,y: x+y , [1,2,3,4,5])
15
和map对比一下,原来map是上下运算,reduce是横着逐个元素进行运算。
reduce把一个函数作用在一个序列[x1, x2, x3, …]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算
>>> a [3, 9, 8, 5, 2]
>>> b [1, 4, 9, 2, 6]
>>> zip(a,b) # zip
[(3, 1), (9, 4), (8, 9), (5, 2), (2, 6)]
>>> sum(x*y for x,y in zip(a,b)) # 解析后直接求和
133 # 3+36+72+10+12
更酷的方法:
>>> reduce(lambda sum,(x,y): sum+x*y,zip(a,b),0) # 综合使用了lambda和zip
133
例1
reduce可以把序列[1, 3, 5, 7, 9]变换成整数13579:
>>> from functools import reduce
>>> def fn(x, y):
return x * 10 + y
>>> reduce(fn, [1, 3, 5, 7, 9]) 13579
例2
编写一个prod()函数,可以接受一个list并利用reduce()求积:
def prod(list): # 声明自定义函数prod()
def multi(x, y): # 设计自定义函数multi
return x*y # 返回乘积
return reduce(multi, list)
list = [1,2,3,4,5] print(prod(list))
简便写法:
# 匿名函数
def prod(list):
return reduce(lambda x ,y : x*y , list)
list = [1,2,3,4,5]
print(prod(list))