当2*2的输出矩阵初始化为零并分配了输出时,为什么python程序为2*2的矩阵加法为两行提供相同的输出?
在下面的Python程序中,当矩阵为0当2*2的输出矩阵初始化为零并分配了输出时,为什么python程序为2*2的矩阵加法为两行提供相同的输出?,python,matrix,Python,Matrix,在下面的Python程序中,当矩阵为0matrix3=[[0]*col]*行并为矩阵赋值时,用于矩阵相加2*2的Python程序为两行提供相同的输出(错误)。为追加操作提供正确的输出 row = int(input("Enter the number of rows:")) col = int(input("Enter the number of columns:")) matrix1 = [] for i in range(row): a1 =[] for j in rang
matrix3=[[0]*col]*行
并为矩阵赋值时,用于矩阵相加2*2的Python程序为两行提供相同的输出(错误)。为追加操作提供正确的输出
row = int(input("Enter the number of rows:"))
col = int(input("Enter the number of columns:"))
matrix1 = []
for i in range(row):
a1 =[]
for j in range(col):
a1.append(int(input()))
matrix1.append(a1)
print("1st matrix")
for i in range(row):
for j in range(col):
print(matrix1[i][j], end = " ")
print()
print("Enter Elements of 2nd Matrix")
matrix2=[]
for i in range(row):
a2 =[]
for j in range(col):
a2.append(int(input()))
matrix2.append(a2)
print("2nd matrix")
for i in range(row):
for j in range(col):
print(matrix2[i][j], end = " ")
print()
matrix3=[[0]*col]*row
print("additing matrices:")
'''
#Give Correct output
for i in range(row):
matrix3.append([])
for j in range(col):
matrix3[i].append(matrix1[i][j]+matrix2[i][j])
'''
#Give Wrong Output for 2*2 matrix with both rows as same
for i in range(row):
for j in range(col):
matrix3[i][j]=matrix1[i][j]+matrix2[i][j]
for i in range(row):
for j in range(col):
print(matrix3[i][j], end = " ")
print()
代码的输出
在矩阵计算部分试试这个
matrix3 = []
for i in range(row):
temp = []
for j in range(col):
temp.append(matrix1[i][j] + matrix2[i][j])
matrix3.append(temp)
更新:
尝试将matrix3变量声明为
matrix3 = [[0]*col for _ in range(row)]
它很好用
matrix3 = [[0]*col]*row
在这里,
matrix3[0]
和matrix3[1]
这两个具有相同引用的嵌套列表,您可以检查引用id(matrix3[0])
,这意味着如果您更改matrix3[0]
它将更改matrix3[1]请参见我知道这一点(代码写在注释部分)。但我想知道为什么“matrix3[i][j]=matrix1[i][j]+matrix2[i][j]”不起作用。因为我是老师,我需要解释。正如上面的评论,这是创建一个相同列表的引用。