我有一个列表 [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
)
我是一名优秀的程序员,十分优秀!