假设我在Python中有两个相同大小的列表,第一个:
[100, 200, 300, 400]
我希望对方成为:
[0, 100, 300, 600]
这是第二个列表中的每个元素等于第一个元素中所有先前元素的总和。
是否有内置的Python函数在列表上执行此类操作?或者我必须考虑算法来做到这一点?
答案 0 :(得分:2)
如果您使用Python 3.2+,则可以使用itertools.accumulate
:
>>> import itertools
>>>
>>> a_list = [100, 200, 300, 400]
>>> list(itertools.accumulate([0] + a_list[:-1]))
[0, 100, 300, 600]
<强>更新强>
要避免创建临时列表,请使用itertools.islice
,itertools.chain
:
>>> from itertools import chain, accumulate, islice
>>>
>>> a_list = [100, 200, 300, 400]
>>> list(accumulate(chain([0], islice(a_list, 0, len(a_list) - 1))))
[0, 100, 300, 600]