从用户输入中获取矩阵并将其定义为列表列表时出现问题
Troubles taking a matrix from user's input, defining it as a list of lists
我想制作一个程序,从用户那里获取输入来构建一个 n x n
矩阵。
这是我尝试做的:
dim=int(input("Dimension of your matrix? "))
row=[]
matrix=[]
for i in range(dim):
for j in range(dim):
inp=float(input("Insert element with indeces: "+str(i+1)+" "+str(j+1)+" :"))
row.append(inp)
print(row)
matrix.append(row)
row.clear()
print("Your matrix is:")
print(matrix)
虽然打印的 行 很好,但我打印的最终矩阵仅包含空列表。它看起来像下面这样:
[[],[],[]]
为什么会这样?
当您在矩阵中追加一行时,您使用的是浅表副本。所以它只保留你的行的地址,当你在循环结束时清理行时,矩阵中的数量也会被清理。您需要使用深拷贝。所以,使用这段代码,当你追加一个新行时:
matrix.append(row.copy())
完整的程序将是:
dim=int(input("Dimension of your matrix? "))
row=[]
matrix=[]
for i in range(dim):
for j in range(dim):
inp=float(input("Insert element with indeces: "+str(i+1)+" "+str(j+1)+" :"))
row.append(inp)
print(row)
matrix.append(row.copy())
row.clear()
print("Your matrix is:")
print(matrix)
.clear()
修改 row
列表 in-place,并且您在外循环的不同迭代中使用相同的列表。在幕后,matrix
列表由指向与 row
相同内存的引用组成。因此,删除 row
中的所有元素也反映在矩阵中。
要解决此问题,请在外循环的每次迭代开始时将 row
变量重新分配给一个空列表。这将用于存储每一行的内存分开。
dim=int(input("Dimension of your matrix? "))
matrix=[]
for i in range(dim):
row = []
for j in range(dim):
inp=float(input("Insert element with indeces: "+str(i+1)+" "+str(j+1)+" :"))
row.append(inp)
print(row)
matrix.append(row)
print("Your matrix is:")
print(matrix)
我想制作一个程序,从用户那里获取输入来构建一个 n x n
矩阵。
这是我尝试做的:
dim=int(input("Dimension of your matrix? "))
row=[]
matrix=[]
for i in range(dim):
for j in range(dim):
inp=float(input("Insert element with indeces: "+str(i+1)+" "+str(j+1)+" :"))
row.append(inp)
print(row)
matrix.append(row)
row.clear()
print("Your matrix is:")
print(matrix)
虽然打印的 行 很好,但我打印的最终矩阵仅包含空列表。它看起来像下面这样:
[[],[],[]]
为什么会这样?
当您在矩阵中追加一行时,您使用的是浅表副本。所以它只保留你的行的地址,当你在循环结束时清理行时,矩阵中的数量也会被清理。您需要使用深拷贝。所以,使用这段代码,当你追加一个新行时:
matrix.append(row.copy())
完整的程序将是:
dim=int(input("Dimension of your matrix? "))
row=[]
matrix=[]
for i in range(dim):
for j in range(dim):
inp=float(input("Insert element with indeces: "+str(i+1)+" "+str(j+1)+" :"))
row.append(inp)
print(row)
matrix.append(row.copy())
row.clear()
print("Your matrix is:")
print(matrix)
.clear()
修改 row
列表 in-place,并且您在外循环的不同迭代中使用相同的列表。在幕后,matrix
列表由指向与 row
相同内存的引用组成。因此,删除 row
中的所有元素也反映在矩阵中。
要解决此问题,请在外循环的每次迭代开始时将 row
变量重新分配给一个空列表。这将用于存储每一行的内存分开。
dim=int(input("Dimension of your matrix? "))
matrix=[]
for i in range(dim):
row = []
for j in range(dim):
inp=float(input("Insert element with indeces: "+str(i+1)+" "+str(j+1)+" :"))
row.append(inp)
print(row)
matrix.append(row)
print("Your matrix is:")
print(matrix)