📅  最后修改于: 2020-07-14 12:29:14             🧑  作者: Mango
reduce(fun,seq)函数用于将在其参数中传递的特定函数应用于传递的序列中提到的所有列表元素。此函数在“ functools”模块中定义。
工作方式:
第一步,选择序列的前两个元素并获得结果。
下一步是对先前获得的结果应用相同的功能,并且紧随第二个元素之后的数字将被再次存储。
继续此过程,直到容器中没有剩余元素为止。
返回的最终结果将返回并打印在控制台上。
# python代码使用操作符函数演示reduce()的工作
import functools
# 初始化list
lis = [ 1 , 3, 5, 6, 2, ]
# 使用reduce来计算列表的总和
print ("列表元素的总和是 : ",end="")
print (functools.reduce(lambda a,b : a+b,lis))
# 使用reduce从列表中计算最大元素
print ("列表的最大元素是 : ",end="")
print (functools.reduce(lambda a,b : a if a > b else b,lis))
输出:
列表元素的总和是 : 17
列表的最大元素是 : 6
使用运算符功能
reduce()也可以与运算符结合使用,以实现与lambda函数类似的功能,并使代码更具可读性。
# python代码使用操作符函数演示reduce()的工作
import functools
import operator
# 初始化list
lis = [ 1 , 3, 5, 6, 2, ]
print ("列表元素的总和是 : ",end="")
print (functools.reduce(operator.add,lis))
# 使用reduce通过运算符函数计算乘积
print ("列表元素的乘积是 : ",end="")
print (functools.reduce(operator.mul,lis))
# 使用reduce连接字符串
print ("The concatenated product is : ",end="")
print (functools.reduce(operator.add,["geeks","for","geeks"]))
输出:
列表元素的总和是 : 17
列表元素的乘积是 : 180
The concatenated product is : geeksforgeeks
reduce()vs accumulate()
reduce()和accumulate()均可用于计算序列元素的总和。但是这两者在实现方面都有差异。
# python代码演示使用reduce()和accumulate()的求和
# importing itertools for accumulate()
import itertools
# 导入functools进行reduce()
import functools
# 初始化list
lis = [ 1, 3, 4, 10, 4 ]
# 使用accumulate()进行汇总求和
print ("使用累加的列表的总和是 :",end="")
print (list(itertools.accumulate(lis,lambda x,y : x+y)))
# 使用reduce()进行汇总求和
print ("使用reduce的列表的总和是 :",end="")
print (functools.reduce(lambda x,y:x+y,lis))
输出:
使用累加的列表的总和是 :[1, 4, 8, 18, 22]
使用reduce的列表的总和是 :22