Skip to main content
 首页 » 编程设计

python之获取列表部分的相应总和

2025年05月04日7虾米姐

我有一个列表 [0, 1, 2, 3, 4, 5, 6] 并对它的各个部分求和,以便:

l = [0, 1, 2, 3, 4, 5, 6] -> 21 
 
l = [1, 2, 3, 4, 5, 6] -> 21 
 
l = [2, 3, 4, 5, 6] -> 20 
 
l = [3, 4, 5, 6] -> 18 
 
l = [4, 5, 6] -> 15 
 
l = [5, 6] -> 11 
 
l = [6] -> 6 
 
l = [] -> 0 

因此,我得到了列表各部分的相应总和:[21, 21, 20, 18, 15, 11, 6, 0]

我使用的代码是:

[sum(l[i:]) for i in range(len(l) + 1)]

但是,对于范围大于 100000 的列表,代码会显着变慢。

知道为什么以及如何优化它吗?

请您参考如下方法:

我建议为此使用 itertools.accumulate(我 recall 比 np.cumsum 更快),通过一些列表反转以获得您想要的输出:

>>> from itertools import accumulate 
>>> lst = [0, 1, 2, 3, 4, 5, 6] 
>>> list(accumulate(reversed(lst)))[::-1] 
[21, 21, 20, 18, 15, 11, 6] 

(如果需要,您可以在末尾添加0)