Python不使用numpy实现两个二维列表对应元素逐位相加的方法
纯Python实现二维矩阵对应元素相加
原代码问题说明
你当前使用+运算符对列表做操作的逻辑是列表拼接,仅会将两个二维列表的元素按顺序合并,不会处理对应位置的数值计算。
实现方案
基础嵌套循环版(易理解)
逐行逐列遍历两个矩阵的对应位置,相加后存入结果矩阵:
def add_matrices(list1, list2): rows = len(list1) cols = len(list1[0]) result = [] for i in range(rows): current_row = [] for j in range(cols): current_row.append(list1[i][j] + list2[i][j]) result.append(current_row) return result
简洁列表推导式版
结合zip函数配对对应行、对应列元素,用列表推导式简化代码:
def add_matrices(list1, list2): return [[a + b for a, b in zip(row1, row2)] for row1, row2 in zip(list1, list2)]
带输入校验的鲁棒版
增加尺寸校验逻辑,避免两个矩阵尺寸不一致时出现非预期结果:
def add_matrices(list1, list2): # 校验行数是否一致 if len(list1) != len(list2): raise ValueError("两个输入矩阵的行数不相等") # 校验每一行的列数是否一致 for row1, row2 in zip(list1, list2): if len(row1) != len(row2): raise ValueError("两个输入矩阵的对应行列数不相等") return [[a + b for a, b in zip(row1, row2)] for row1, row2 in zip(list1, list2)]
测试验证
使用你给出的示例输入测试:
list1 = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] list2 = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] print(add_matrices(list1, list2))
输出结果为:
[[2, 4, 6], [8, 10, 12], [14, 16, 18]]
和预期一致。
内容的提问来源于stack exchange,提问作者sari023
相关产品推荐
相关产品推荐

