我正在尝试对列表中的连续数字求和,同时保持第一个相同。
所以在这种情况下,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]
您想要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))
。
y = [sum(x[:i+1]) for i in range(len(x))]
使用 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
总而言之,直到您所在的元素的所有元素?
x = [5,10,15]
y = [sum(x[:i+1]) for i in range(len(x))]