📜  Python中的reduce

📅  最后修改于: 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()均可用于计算序列元素的总和。但是这两者在实现方面都有差异。

  • reduce()在“ functools”模块中定义,accumulate()在“ itertools”模块中定义。
  • reduce()存储中间结果,仅返回最终的求和值。而accumulate()返回包含中间结果的迭代器。返回的迭代器的最后一个数字是列表的求和值。
  • reduce(fun,seq)将函数作为第一参数,将序列作为第二参数。相反,accumulate(seq,fun)将序列作为第一个参数,将函数用作第二个参数。

 

# 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