我有一箇舊的名單,我想每一個元素總結到一個新的列表:總和所有的列表元素,以新的列表
lst_old = [1, 2, 3, 4, 5]
lst_new = [1, 3, 6, 10, 15]
是否有實現的是Python 3短優雅的方式和快速的代碼?除了僅打印最後一個元素的sum()
,我無法找到適合我的問題的解決方案。
我有一箇舊的名單,我想每一個元素總結到一個新的列表:總和所有的列表元素,以新的列表
lst_old = [1, 2, 3, 4, 5]
lst_new = [1, 3, 6, 10, 15]
是否有實現的是Python 3短優雅的方式和快速的代碼?除了僅打印最後一個元素的sum()
,我無法找到適合我的問題的解決方案。
您可以使用itertools.accumulate
,如:
from itertools import accumulate
lst_old = [1, 2, 3, 4, 5]
lst_new = list(accumulate(lst_old))
# [1, 3, 6, 10, 15]
您可以使用LISTNAME一個列表的片段的總和[開始:結束],有開始和結束的可選參數(默認爲開頭和列表結尾):
lst_old = [1, 2, 3, 4, 5]
lst_new = []
for i, num in enumerate(lst_old):
index = i+1
var = sum(lst_old[:index])
print(var)
lst_new.append(var)
Jon的回答也是一樣的。您也可以將起始值傳遞給枚舉,而不是手動遞增。但是,我沒有投票:) – thiruvenkadam
itertools.accumulate正如Jon Clements所提到的那樣是最好的方法。然而,如果你想要一個明確的方式做到這一點,這裏有雲:
lst_old = [1, 2, 3, 4, 5]
sum = 0
lst_new = []
for item in lst_old:
sum += item
lst_new.append(sum)
這主要優點是,你可以在一個功能包裝它,如果有任何轉換或驗證需要執行,可以被添加。
例如,假設你要停止功能保持一個極限後去,下面會有所幫助:
def accumulate_items(lst_old, limit=0):
sum = 0
output_list = []
for item in lst_old:
sum += item
output_list.append(sum)
if limit and sum > limit:
break
return output_list
的靈活性將是無限的,如果有任何轉換或操作需要在這裏完成。有一個需要設置的前提條件?前進。有一個需要測試的後置條件?前進。非常龐大的列表,並希望像itertools.accumulate一樣的基於生成器的解決方案?前進。需要添加驗證或異常處理?前進。
但是,沒有變革,只是積累?以前的答案是最好的。與列表索引一起使用的和與複雜天空火箭的順序相當緩慢。
誰的文檔在那裏:https://docs.python.org/3/library/itertools.html#itertools.accumulate – Guillaume