我試圖總結列表中的連續數字,同時保持第一個相同。在列表中加上連續的數字。 Python
所以在這種情況下,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]
我試圖總結列表中的連續數字,同時保持第一個相同。在列表中加上連續的數字。 Python
所以在這種情況下,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]
y = [sum(x[:i+1]) for i in range(len(x))]
你想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))
。
隨着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範圍會更好,如果你使用Python 2.x的 – oleg
這需要一噸的子表的創建,並只適用於序列,而不是任意的迭代。它也在3.2+中重新發明輪子。 –
@ draconisthe0ry:小心這種方法的性能特點,因爲當列表很長時,它變得非常慢。它不僅創建了「len(x)」子列表,而且每次都添加每個子列表,而不是將最新值添加到運行總和中。 Lattyware的答案是pythonic解決方案。 –