Python 中的 reduce 函数:累积计算

reduce 是 Python 中一个用于累积计算的函数,它会把一个序列中的元素,通过指定的函数,逐步归纳成一个单一的结果。

它和 mapfilter 一样,是函数式编程的经典工具。

一、基本用法

reduce 函数的语法:

复制代码
from functools import reduce

reduce(function, iterable[, initializer])
  • function:接收两个参数的函数,用于累积计算

  • iterable:可迭代对象

  • initializer(可选):初始值

示例 1:计算总和

复制代码
from functools import reduce

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

# 执行过程:
# x=1, y=2 → 3
# x=3, y=3 → 6
# x=6, y=4 → 10
# x=10, y=5 → 15

示例 2:指定初始值

复制代码
from functools import reduce

numbers = [1, 2, 3]
result = reduce(lambda x, y: x + y, numbers, 10)
print(result)  # 16(10 + 1 + 2 + 3)

# 执行过程:
# x=10, y=1 → 11
# x=11, y=2 → 13
# x=13, y=3 → 16

二、reduce vs 其他方式

1. reduce vs 循环

复制代码
# 用循环计算乘积
numbers = [1, 2, 3, 4, 5]
product = 1
for n in numbers:
    product *= n

# 用 reduce
from functools import reduce
product = reduce(lambda x, y: x * y, numbers)

2. reduce vs sum()

对于求和,sum() 是更好的选择:

复制代码
# 不推荐:sum 已经内置了
reduce(lambda x, y: x + y, numbers)

# 推荐
sum(numbers)

3. reduce vs functools.accumulate

accumulate 返回中间结果reduce 只返回最终结果

复制代码
from itertools import accumulate

# accumulate 返回每一步的累积结果
print(list(accumulate([1, 2, 3, 4])))  # [1, 3, 6, 10]

# reduce 只返回最终结果
print(reduce(lambda x, y: x + y, [1, 2, 3, 4]))  # 10

reduce 就是把一个序列累积成一个值的工具,建议在 summaxmin 等内置函数不适用时再考虑它,日常开发更多用 for 循环来保持代码清晰。

相关推荐
智能体与具身智能6 小时前
TVA具身智能的概念、架构与应用(19)
人工智能·python·具身智能
2601_962294617 小时前
python中range函数怎么用
python·for循环·可迭代对象·range函数·整数列表
青 春 记 忆8 小时前
零基础入门python70:Docker Compose 编排完整后端
python·后端开发
新时代牛马8 小时前
字符设备驱动完整篇:从 cdev_add、file_operations 到chrdev_open 与排障
开发语言·python
白山编程大哥9 小时前
Java OutputStreamWriter 详解:从字符到字节的桥梁
java·开发语言·python
落羽的落羽10 小时前
【AI】快速理解AI应用的相关名词概念
linux·c++·人工智能·python·计算机网络·算法
Chasing__Dreams10 小时前
大模型应用开发--13--RAG 查询优化策略
python
“AI国潮设计-小江”10 小时前
《Python实战 | SDXL大模型批量生成“英歌舞海浪”蛋糕IP,附核心Prompt控制代码与IP授权变现思路》
人工智能·python·prompt·aigc
znnnk10 小时前
【Python】GUI 开发从入门到实战(三):PyQt/PySide 进阶之路
开发语言·python·pyqt
触底反弹12 小时前
面试被问到 Text2SQL,我用 DeepSeek 自己实现了一个
python·sqlite