Python 小技巧 051:Python reduce()
Python reduce() 函数reduce() 函数会对序列中的元素进行累积。
reduce() 将一个序列中的所有数据进行下列处理:
用传给 reduce 中的函数 function(有两个参数)先对集合中的第 1、2 个元素进行操作,得到的结果再与第三个数据用 function 函数运算,得到的结果再与第四个数据用 function 函数运算 …… 最后得出的结果将被返回。
reduce() 函数有点像这样:
def reduce(func, seq):
if len(seq) == 1:
return seq
val = func(seq, seq)
for i in seq:
val = func(val, i)
return val
注意:在 Python 2 中,reduce() 是内置函数,可以直接调用;但在 Python 3,reduce() 被移植到了 functools 模块中,需要先从 functools 模块导入 reduce() 才可以使用。
static/image/hrline/line7.pngstatic/image/hrline/line7.pngstatic/image/hrline/line7.pngstatic/image/hrline/line7.pngstatic/image/hrline/line7.pngstatic/image/hrline/line7.pngstatic/image/hrline/line7.pngstatic/image/hrline/line7.pngstatic/image/hrline/line7.pngstatic/image/hrline/line7.png
例如,用 reduce() 对序列求和:
>>> from functools import reduce
>>> list1 =
>>> reduce(lambda x, y: x + y, list1)
15
求序列的乘积:
>>> from functools import reduce
>>> list1 =
>>> reduce(lambda x, y: x * y, list1)
40320
但为了提高代码的可读性,建议用 for 循环实现:
>>> product = 1
>>> for i in list1:
product *= i
>>> product
40320
reduce() 函数还有一个 initial 参数,用于指定初始化的值。例如:
>>> from functools import reduce
>>> reduce(lambda x, y: x + y, , 10) # 8 + 8 + 9 + 9 + 10
44
注意:reduce() 函数传参时不能使用关键字参数,否则会报错:
reduce(lambda x, y: x + y, , initial=10)
Traceback (most recent call last):
File "<pyshell#26>", line 1, in <module>
reduce(lambda x, y: x + y, , initial=10)
TypeError: reduce() takes no keyword arguments
小技巧无人问津......
好像 @zltzlt 有一段时间没更了
页:
[1]