将列表的总和结果存储到另一个列表中?

时间:2016-03-10 01:24:43

标签: python list sum

我试图对列表中的元素求和,然后将每个和的结果存储在另一个列表中。

到目前为止,我有这个:

array1 = [1, 2, 3, 4]    
print(sum(int(i) for i in array1))

输出为10.

但我想做的事情是这样的:

input = [1, 2, 3, 4]    
output = [1, 3, 6, 10]

我是否需要在每个步骤中将值存储到第二个列表中?

4 个答案:

答案 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]