我试图创建此代码以输入m x n矩阵。我打算输入,[[1,2,3],[4,5,6]]但是代码产生了[[4,5,6],[4,5,6]。当我输入其他m×n矩阵时,也会发生相同的情况,代码会产生行数相同的m×n矩阵。
[[1,2,3],[4,5,6]]
[[4,5,6],[4,5,6]
也许您可以帮助我找到我的代码有什么问题。
m = int(input('number of rows, m = ')) n = int(input('number of columns, n = ')) matrix = []; columns = [] # initialize the number of rows for i in range(0,m): matrix += [0] # initialize the number of columns for j in range (0,n): columns += [0] # initialize the matrix for i in range (0,m): matrix[i] = columns for i in range (0,m): for j in range (0,n): print ('entry in row: ',i+1,' column: ',j+1) matrix[i][j] = int(input()) print (matrix)
问题出在初始化步骤上。
for i in range (0,m): matrix[i] = columns
这段代码实际上使您的每一行都matrix引用相同的columns对象。如果任何列中的任何项目发生更改-其他所有列都将发生变化:
matrix
columns
>>> for i in range (0,m): ... matrix[i] = columns ... >>> matrix [[0, 0, 0], [0, 0, 0]] >>> matrix[1][1] = 2 >>> matrix [[0, 2, 0], [0, 2, 0]]
您可以在嵌套循环中初始化矩阵,如下所示:
matrix = [] for i in range(0,m): matrix.append([]) for j in range(0,n): matrix[i].append(0)
或者,通过使用列表理解来实现单线:
matrix = [[0 for j in range(n)] for i in range(m)]
要么:
matrix = [x[:] for x in [[0]*n]*m]
也可以看看:
希望能有所帮助。