我的输入是这个列表:
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)
你们能解释一下发生了什么或建议其他解决方案吗?
你可以试试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)
| 归档时间: |
|
| 查看次数: |
143 次 |
| 最近记录: |