reduce把一个函数作用在一个序列[x1, x2, x3, ...]上
这个函数必须接收两个参数
参数1:函数
参数2:序列:list tuple dict set等
reduce把结果继续和序列的下一个元素做累积计算,其效果就是:
fun(x,y):这是一个作用在两个参数的函数,符合reduce用法
reduce(fun,[a,b,c,d])
=fun(fun(fun(a,b),c),d)
需要注意的是
先执行内部的fun,然后再依次展开,知道最后出现了两个参数~
但是细想一下,一般的操作还真用不到这个reduce
下面还是用廖雪峰老师的例子来说吧
求一个整数list的 所有元素的和
将一个整数list 变成顺序一样的一个整数
我们首先看看第一个列子
#定义一个list
nums=[1,2,3,4,5,6]
#定义一个求和函数,这个函数必须是两个参数的
def getSum(x,y):
return x+y
#我们来尝试一下reduce函数
result=reduce(getSum,nums)
接下来看看输出结果
print(result)
执行过程分析
reduce(getSum,[1,2,3,4,5,6])
⬇️
getSum(getSum(getSum(getSum(getSum(1,2),3),4),5),6)
答案很清晰
#即为1到6的和,但是思路很重要
21
我们来看一下实际的示例图
注意
在使用reduce时,必须导入依赖:from functools import reduce,而map则不需要
现在我们来看下第二个示例:
先理解题意:
我们现在要把[1,2,3,4,5]变成12345,即按照个十百千万的方式完成证书的拼装
首先定义list
nums=[1,2,3,4,5]
然后定义方法,注意参数必须是两位的
def fun(x,y):
return x*10+y
然后调用即可
print(reduce(fun,nums))
那么处理逻辑:
reduce(fun,[1,2,3,4,5])
⬇️
fun(fun(fun(fun(1,2),3),4),5)
即: 先拼接1,2
然后得到的结果 再和3 进行拼接
再得到的结果和4拼接
然后和5拼接
对,reduce思路即为此
看下实际演示: