矩阵求和函数兼容判断问题求助:修复非匹配矩阵错误输出
问题分析与修复方案
你的代码问题出在仅验证了两个矩阵的行数相等,却没有检查每一行的列数是否完全匹配。比如你提到的测试用例:
- M1是
[[1, 2], [2, 3]](2行2列) - M2是
[[4, 2, 1], [1, 2, 3]](2行3列)
两者行数相同,但列数不匹配,按照要求应该返回空列表,但你的代码直接跳过了列数检查,强行对前两列求和,导致输出错误。另外,你代码里的while len(M1)==len(M2):完全是多余的,这里用if判断就足够了。
修复后的代码
def matrix_sum(M1, M2): # 第一步:检查行数是否相等 if len(M1) != len(M2): return [] # 第二步:检查每一行的列数是否都对应相等 for row1, row2 in zip(M1, M2): if len(row1) != len(row2): return [] # 第三步:行数和列数都兼容,执行矩阵求和 res = [] for i in range(len(M1)): row = [] for j in range(len(M1[i])): row.append(M1[i][j] + M2[i][j]) res.append(row) return res
代码解释
- 行数检查:首先判断两个矩阵的行数是否一致,不一致直接返回空列表。
- 列数检查:通过
zip遍历每一对行,只要有任意一对行的长度(列数)不相等,就返回空列表。 - 矩阵求和:只有当行数和所有行的列数都匹配时,才执行逐元素相加的操作,返回正确的矩阵和。
测试你提到的用例:
print(matrix_sum([[1, 2], [2, 3]], [[4, 2, 1], [1, 2, 3]])) # 输出 [] print(matrix_sum([[1,2,3],[4,5,6]], [[1,1,1],[1,1,1]])) # 输出 [[2,3,4],[5,6,7]]
现在就能得到符合预期的结果了。
内容的提问来源于stack exchange,提问作者bb ef
相关产品推荐
相关产品推荐

