如何在Python中对同维度嵌套列表按对应位置求和?
嵌套列表对应位置求和的正确解法
你的问题出在误用了列表的+=操作——在Python中,列表的+=是拼接两个列表,而非对应位置元素相加,所以才会得到合并后的结果,而非求和结果。
解法1:嵌套循环(直观易懂)
先初始化结果结构,再逐层遍历每个元素位置,累加所有列表对应位置的数值:
# 示例输入 implemented_moves = [[[1,2], [3,4]], [[5,6], [7,8]]] result = [] # 遍历每一行的索引 for row_idx in range(len(implemented_moves[0])): current_row = [] # 遍历当前行的每个元素索引 for elem_idx in range(len(implemented_moves[0][row_idx])): total = 0 # 累加所有列表中对应位置的元素 for lst in implemented_moves: total += lst[row_idx][elem_idx] current_row.append(total) result.append(current_row) print(result) # 输出: [[6, 8], [10, 12]]
解法2:列表推导式(简洁高效)
利用zip()函数将对应位置的元素打包,结合列表推导式实现一行式求和:
implemented_moves = [[[1,2], [3,4]], [[5,6], [7,8]]] result = [ [sum(elems) for elems in zip(*rows)] for rows in zip(*implemented_moves) ] print(result) # 输出: [[6, 8], [10, 12]]
解释:
zip(*implemented_moves):将外层的N个N行N列列表按行配对,示例中会得到([[1,2], [3,4]], [[5,6], [7,8]]),拆分为两组行对:([1,2], [5,6])和([3,4], [7,8])zip(*rows):对每组行对,再按元素位置配对,比如([1,2], [5,6])会拆分为(1,5)和(2,6)sum(elems):对每个位置的配对元素求和,最终组成结果列表
内容的提问来源于stack exchange,提问作者Ayman.1302
相关产品推荐
相关产品推荐

