我试图在列表中对连续数字求和,同时保持第一个数字相同。
所以在这种情况下,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]
答案 0 :(得分:10)
你想要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))
。
答案 1 :(得分:4)
y = [sum(x[:i+1]) for i in range(len(x))]
答案 2 :(得分: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
答案 3 :(得分:0)
总结所有元素直到您所在的元素?
x = [5,10,15]
y = [sum(x[:i+1]) for i in range(len(x))]