Python爬虫、数据分析与可视化:工具详解与案例实战
上QQ阅读APP看书,第一时间看更新

2.5.3 通过reduce方法实现累计效果

reduce方法的语法是reduce(function,iterable[,initializer]),它会调用由第1个参数指定的函数,对iterable参数序列中的元素进行累计处理,同时可以带有一个初始值initializer,当然也可以不带。同样,第1个参数也可以是lambda表达式。在如下的ReduceDemo.py代码里,我们将演示相关的做法。


01 from functools import reduce
02 def add(x, y):
03     return x + y
04 print(reduce(add, [1,2,3]))    # 输出6
05 def multiply(x,y):
06     return x*y
07 print(reduce(multiply, [2,3,4],10))    # 输出240
08 numLit=[2,3,4]
09 print(reduce(lambda x,y: x+y, numLit,0)) # 9

注意,在Python 3里,为了使用reduce方法,需要像第1行那样引入对应的包,在Python 2里则无须引入。在第2行和第3行里,我们定义了实现两数相加的add方法。在第4行的reduce方法里,根据第1个参数add对第2个参数指定序列中的元素进行加法操作,结果是累加和。由于返回结果是值,因此无须再进行转换操作。

在第7行的reduce方法里,根据第1个参数multiply方法的定义对第2个参数指定的序列进行乘法操作,这里还用第3个参数带有一个初始值10,所以操作步骤是10乘以2乘以3乘以4,结果是240。

在第9行里,我们演示了在reduce方法里使用lambda表达式的做法,具体步骤是针对第2个参数指定的序列进行由lambda方法指定的x+y操作,同时带有初始值0,具体操作是2加3加4再加初始值0,结果是9。