You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python3单行代码实现列表元素累加和生成器?

单行生成器实现列表元素累加和

方法1:使用海象运算符(Python3.8+,最简洁)

通过海象运算符在生成器表达式内部维护累加状态,直接实现需求:

acc = 0; gen = (acc := acc + num for num in [1, 2, 3, 4])

测试效果:

>>> next(gen)
1
>>> next(gen)
3
>>> next(gen)
6
>>> next(gen)
10

这里用分号将累加变量初始化与生成器定义合并为一行,acc会在每次next()调用时更新,从而保留之前的累加值。

如果不想提前初始化acc,可以把初始化逻辑整合进生成器表达式:

gen = (acc := acc + num for num in [1, 2, 3, 4] if (acc := 0) or True)

if (acc := 0) or True的作用是在生成器启动时将acc设为0,后续因True始终成立,不会过滤任何元素。

方法2:兼容旧版本Python(无海象运算符)

如果你的Python版本低于3.8,可以用可变对象(比如列表)存储累加值——可变对象的修改会在生成器迭代中保留状态:

gen = (sum_list[0] for sum_list in [[0]] for num in [1, 2, 3, 4] if (sum_list[0] := sum_list[0] + num))

这种方式利用了列表的可变性,让累加值在生成器的多次调用中持续更新。

方法3:借助标准库itertools(最简实现)

Python标准库itertools的accumulate函数本身就生成累加序列的迭代器,行为完全符合你的需求,可直接作为生成器使用:

from itertools import accumulate; gen = iter(accumulate([1, 2, 3, 4]))

甚至可以更简洁(accumulate返回的迭代器可直接调用next()):

from itertools import accumulate; gen = accumulate([1, 2, 3, 4])

内容的提问来源于stack exchange,提问作者Xar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 22:10:28