Sum consecutive numbers in a list. Python

折月煮酒 提交于 2019-12-05 08:25:40
y = [sum(x[:i+1]) for i in range(len(x))]

You want itertools.accumulate() (added in Python 3.2). Nothing extra needed, already implemented for you.

In earlier versions of Python where this doesn't exist, you can use the pure python implementation given:

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)
    total = next(it)
    yield total
    for element in it:
        total = func(total, element)
        yield total

This will work perfectly with any iterable, lazily and efficiently. The itertools implementation is implemented at a lower level, and therefore even faster.

If you want it as a list, then naturally just use the list() built-in: list(accumulate(x)).

With numpy.cumsum:

In[1]: import numpy as np
In[2]: x = [5,10,15]
In[3]: x = np.array(x)
In[4]: y = x.cumsum()
In[5]: y
Out[6]: array([ 5, 15, 30])

I am using Python 3.4

As in sum all the elements up to the element you're on?

x = [5,10,15]
y = [sum(x[:i+1]) for i in range(len(x))]
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!