如何将每个嵌套列表的总和传递到下一个嵌套列表?

VER*_*OSE 5 python list

我的输入是这个列表:

my_list = [[3, 4, -1], [0, 1], [-2], [7, 5, 8]]
Run Code Online (Sandbox Code Playgroud)

我需要对嵌套列表求和i并将其填充到列表的右侧i+1,这就像接力课程。

我必须指出的是,原始列表应该保持不变,并且不允许我复制它。

wanted = [[3, 4, -1], [0, 1, 6], [-2, 7], [7, 5, 8, 5]]
Run Code Online (Sandbox Code Playgroud)

我尝试了下面的代码,但我得到了一个比原始列表包含更多元素的列表:

from itertools import pairwise

wanted = []

for left, right in pairwise(my_list):
    wanted.extend([left, right + [sum(left)]])
    
print(wanted)
[[3, 4, -1], [0, 1, 6], [0, 1], [-2, 1], [-2], [7, 5, 8, -2]]
Run Code Online (Sandbox Code Playgroud)

你们能解释一下发生了什么或建议其他解决方案吗?

And*_*ely 5

你可以试试itertools.accumulate

from itertools import accumulate

my_list = [[3, 4, -1], [0, 1], [-2], [7, 5, 8]]

print(list(accumulate(my_list, lambda l1, l2: [*l2, sum(l1)])))
Run Code Online (Sandbox Code Playgroud)

印刷:

[[3, 4, -1], [0, 1, 6], [-2, 7], [7, 5, 8, 5]]
Run Code Online (Sandbox Code Playgroud)

编辑:正如@KellyBundy 在评论中指出的那样,列表中的第一个元素是共享的。因此,如果出现问题,请复制它,例如:

accumulate([my_list[0][:], *my_list[1:]], lambda l1, l2: [*l2, sum(l1)])
Run Code Online (Sandbox Code Playgroud)