1. 先记住关键点

  1. reduce 在 functools 模块里,必须先导入
  2. 作用:把列表 / 可迭代对象从左到右两两累积计算,最后变成一个值
  3. 适合:累加、累乘、求最大、拼接字符串等归约汇总场景

2. 导入语法

python

运行

from functools import reduce

3. 基础语法

python

运行

reduce(函数, 可迭代对象, [初始值])

函数必须接收两个参数

  • 第一个:上一次累积的结果
  • 第二个:当前遍历的元素

4. 经典示例

示例 1:列表累加求和

python

运行

from functools import reduce

lst = [1,2,3,4,5]
res = reduce(lambda x,y: x + y, lst)
print(res)  # 15

执行过程:((((1+2)+3)+4)+5)

示例 2:列表累乘

python

运行

res = reduce(lambda x,y: x * y, lst)
print(res)  # 120

示例 3:求列表最大值

python

运行

lst = [12,45,7,89,23]
res = reduce(lambda x,y: x if x>y else y, lst)
print(res)  # 89

示例 4:带初始值

初始值会作为第一个计算的 x

python

运行

lst = [1,2,3]
# 初始值10,先算 10+1,再往后累加
res = reduce(lambda x,y:x+y, lst, 10)
print(res)  # 16

示例 5:拼接字符串

python

运行

words = ["Hello"," ","Python","!"]
res = reduce(lambda x,y: x+y, words)
print(res)  # Hello Python!

5. 易错点

  1. 忘了导入 from functools import reduce 直接用会报错
  2. 传入的 lambda 必须两个参数,不能只写一个
  3. 空序列必须给初始值,否则报错

6. 一句话总结

reduce 就是从左往右两两合并,把一长串数据最终算出一个结果

更多推荐