如何在Python中输入矩阵(二维列表)?

发布于 2021-01-29 19:37:17

我试图创建此代码以输入m x
n矩阵。我打算输入,[[1,2,3],[4,5,6]]但是代码产生了[[4,5,6],[4,5,6]。当我输入其他m×n矩阵时,也会发生相同的情况,代码会产生行数相同的m×n矩阵。

也许您可以帮助我找到我的代码有什么问题。

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)
关注者
0
被浏览
2895
1 个回答
  • 面试哥
    面试哥 2021-01-30
    为面试而生,有面试问题,就找面试哥。

    问题出在初始化步骤上。

    for i in range (0,m):
      matrix[i] = 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]
    

    也可以看看:

    • 如何在Python中初始化二维数组?

    希望能有所帮助。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看