https://docs.python.org/zh-cn/3/library/itertools.html#itertools.accumulate
在 Python 中,accumulate
是一个生成器(generator), 是来自 itertools
模块的一个函数。
它的作用是返回一个迭代器,该迭代器生成输入数据的累积结果。简而言之,它会逐步计算 (并不会立即计算出所有累积值,而是逐个生成累积结果) 并返回一个可迭代对象中的元素的累积总和或应用某种操作后的结果。
使用 accumulate
的基本语法:
from itertools import accumulate
accumulate(iterable, func=operator.add, *, initial=None)
iterable
:需要累积的可迭代对象(如列表、元组等)。func
:指定用于累积的函数,默认为operator.add
,即计算总和。如果指定其他函数(如operator.mul
),则会计算累积乘积等。initial
:如果提供,累积的初始值会作为第一项与iterable
中的第一个值一起进行计算。
示例
- 计算累积和:
from itertools import accumulate
data = [1, 2, 3, 4]
result = list(accumulate(data))
print(result)
输出:
[1, 3, 6, 10]
这里,accumulate
计算的是每一步的累加值:1, 1+2, 1+2+3, 1+2+3+4
。
- 计算累积乘积:
import operator
from itertools import accumulate
data = [1, 2, 3, 4]
result = list(accumulate(data, func=operator.mul))
print(result) # 输出 [1, 2, 6, 24]
# 使用自定义的函数进行累积操作
def multiply(x, y):
return x * y
numbers = [1, 2, 3, 4]
accumulated = itertools.accumulate(numbers, multiply)
print(list(accumulated)) # 输出 [1, 2, 6, 24]
输出:
[1, 2, 6, 24]
这里,accumulate
计算的是每一步的累积乘积:1, 1*2, 1*2*3, 1*2*3*4
。
- 使用初始值:
from itertools import accumulate
data = [1, 2, 3]
result = list(accumulate(data, initial=10))
print(result)
输出:
[10, 11, 13, 16]
在这个例子中,累积从初始值 10
开始,结果是 10, 10+1, 10+1+2, 10+1+2+3
。
总结:
accumulate
可以用于计算可迭代对象的逐步累积结果,并且可以通过指定不同的函数来控制如何计算累积结果,常用于累加、累积乘积等场景。