Python矩阵减法后原列表值异常:输出结果与原矩阵、矩阵2重复问题排查
矩阵减法中的浅拷贝问题及修复方案
你的代码核心问题出在Subraction函数的浅拷贝操作上,导致原数组被篡改、结果异常:
问题分析
result.extend(arr1)并没有创建arr1中行列表的独立副本,只是把这些行的引用添加到了result中。这意味着result的每一行和arr1的对应行是同一个内存对象——当你执行result[i][j] = arr1[i][j] - arr2[i][j]时,实际上是直接修改了arr1(也就是主程序里的A)的元素,引发了以下现象:
result和arr1值最终相同:二者共享行对象,修改result就是修改arr1- 原列表
A的值被意外改变:因为arr1是A的引用,函数内的修改会直接影响外部变量 - 打印结果混乱:
A被篡改后,printmatrix输出的Matrix 1实际上已经变成了差值矩阵,容易和其他矩阵混淆
修复方案
修改Subraction函数,创建完全独立的新矩阵,避免引用共享:
修复后的完整代码
def matrixinput(a,b): arr = [] for i in range(a): row = [] for j in range(b): row.append(int(input())) arr.append(row) return arr def printmatrix(a,b,c): print('Matrix 1') for i in a: for j in i: print(j , end = ' ') print() print('Matrix 2') for i in b: for j in i: print(j , end = ' ') print() print('Difference of Matrix') for x in c: for y in x: print(y , end = ' ') print() def Subraction(arr1, arr2): result = [] # 逐行创建新列表,存储差值,避免引用原数组行 for i in range(len(arr1)): new_row = [] for j in range(len(arr1[i])): new_row.append(arr1[i][j] - arr2[i][j]) result.append(new_row) return result a,b = int(input()), int(input()) A = matrixinput(a,b) B = matrixinput(a,b) C = Subraction(A,B) printmatrix(A,B,C)
简化版Subraction函数(用列表推导式)
如果追求简洁,也可以用嵌套列表推导式实现:
def Subraction(arr1, arr2): return [[arr1[i][j] - arr2[i][j] for j in range(len(arr1[i]))] for i in range(len(arr1))]
这样修改后,result的每一行都是全新的列表,和原数组A、B完全独立,执行减法操作不会影响原数组,打印结果也会符合预期。
内容的提问来源于stack exchange,提问作者Adhil
相关产品推荐
相关产品推荐

