7

我正在尝试对列表中的连续数字求和,同时保持第一个相同。

所以在这种情况下,5 将保持 5,10 将是 10 + 5 (15),15 将是 15 + 10 + 5 (30)

x = [5,10,15]
y = []

for value in x:
   y.append(...)

print y

[5,15,30]
4

4 回答 4

13

您想要itertools.accumulate()(在 Python 3.2 中添加)。不需要额外的东西,已经为您实施了。

在不存在此功能的早期 Python 版本中,您可以使用给出的纯 Python 实现:

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

这将与任何可迭代的、懒惰的和有效的完美配合。该itertools实现是在较低级别实现的,因此速度更快。

如果你想要它作为一个列表,那么自然只需使用list()内置的: list(accumulate(x))

于 2013-06-12T20:42:24.057 回答
5
y = [sum(x[:i+1]) for i in range(len(x))]
于 2013-06-12T20:43:08.727 回答
2

使用 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])

我正在使用 Python 3.4

于 2015-11-03T06:43:34.050 回答
0

总而言之,直到您所在的元素的所有元素?

x = [5,10,15]
y = [sum(x[:i+1]) for i in range(len(x))]
于 2013-06-12T20:43:16.563 回答