我试图对列表中的元素求和,然后将每个和的结果存储在另一个列表中。
到目前为止,我有这个:
array1 = [1, 2, 3, 4]
print(sum(int(i) for i in array1))
输出为10.
但我想做的事情是这样的:
input = [1, 2, 3, 4]
output = [1, 3, 6, 10]
我是否需要在每个步骤中将值存储到第二个列表中?
答案 0 :(得分:2)
如果你正在运行Python 3.2或更高版本,那么已有一个函数,itertools.accumulate
:
import itertools
input = [1,2,3,4]
output = list(itertools.accumulate(input))
如果您使用的是3.2之前的Python版本,则可以随时借用accumulate
文档中提供的等效代码:
def accumulate(iterable, func=operator.add):
'Return running totals'
# accumulate([1,2,3,4,5]) --> 1 3 6 10 15
# accumulate([1,2,3,4,5], operator.mul) --> 1 2 6 24 120
it = iter(iterable)
try:
total = next(it)
except StopIteration:
return
yield total
for element in it:
total = func(total, element)
yield total
答案 1 :(得分:1)
使用列表推导可能不是最简单的方法。你可以这样做:
input = [1, 2, 3, 4]
output = []
total = 0
for i in input:
total += i
output.append(total)
答案 2 :(得分:0)
这就是你想要的,但也许不是那么好理解......
output = [sum(array1[:i+1]) for i in range(len(array1))]
您也可以这样做(这应该更容易理解):
i = 0
output = []
for item in array1:
i += item
output.append(i)
答案 3 :(得分:0)
如果您在数字操作中做了很多工作,cumsum方法会在此处执行您想要的操作,那么您可能会非常有用:
In [11]: import numpy as np
In [12]: array1 = np.array([1, 2, 3, 4])
In [13]: array1.cumsum()
Out[13]: array([ 1, 3, 6, 10])
使用python很容易应用相同的逻辑:
def cumsum(l):
it = iter(l)
sm = next(it, 0)
yield sm
for i in it:
sm += i
yield sm
演示:
In [16]: array1 = [1, 2, 3, 4]
In [17]: list(cumsum(array1))
Out[17]: [1, 3, 6, 10]