从用户输入中获取矩阵并将其定义为列表列表时出现问题

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)