简介:accumulate 是内置模块itertools中的一个函数,主要用于生成一个迭代器,该迭代器按照指定的操作对输入的可迭代对象进行累积计算。它返回一个逐步累积的结果序列。
参数说明:iterable, func=None
1、iterable: 可迭代对象,表示要进行累积操作的数据序列。
2、func: 二元操作函数,表示对两个元素进行操作的规则。该函数接受两个参数并返回一个结果。如果未提供该参数,默认使用加法运算进行累积计算。
历史攻略:
Python:heapq模块使用
测试用例:多条件下编写,懒人妙用itertools
Python:filter、map、reduce、zip函数
Python:常见排列组合问题处理
Python高阶:counter、orderedDict、defaultdict、deque、queue简单示例
案例: 与reduce的区别;reduces是将所有的结果全部计算完成,给出最终结果;而accumulate是返回一个逐步累积的结果序列
# -*- coding: utf-8 -*-
# time: 2023/10/22 23:34
# file: accumulate_demo.py
# 公众号: 玩转测试开发
from functools import reduce
from itertools import accumulate
arr1 = [i for i in range(1, 5)]
print(arr1) # [1, 2, 3, 4]
# 默认累加
res1 = list(accumulate(arr1)) # [1, 3, 6, 10]
print(res1)
def multi(a, b):
# 乘法函数
return a * b
# 传入二元函数,则支持自定义累积方式。如累积乘法
res2 = list(accumulate(arr1, multi))
res3 = list(accumulate(arr1, lambda a, b: a * b)) # 等价于 multi(a, b)
print(res2)
print(res3)
# 更多例子
print(list(accumulate(arr1, lambda a, b: a / b))) # 累积除法
print(list(accumulate(arr1, lambda a, b: a ** b))) # 累积幂
new_list30 = reduce(multi, [1, 2, 3])
new_list31 = reduce(lambda x, y: x + y, [1, 2, 3, 4, 5])
new_list32 = reduce(lambda x, y: x + y, ["a1", "b2", "c3"])
print(new_list30) # 6
print(new_list31) # 15
print(new_list32) # a1b2c3
运行结果: