如何在Python中输入矩阵(2D list)?

2024-04-25 22:15:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我试着创建这个代码来输入一个m×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)

Tags: columnsofthe代码innumberforinput
3条回答

除了接受的答案外,您还可以按以下方式初始化行- matrix[i] = [0]*n

因此,以下代码将起作用-

m = int(input('number of rows, m = '))
n = int(input('number of columns, n = '))
matrix = []
# initialize the number of rows
for i in range(0,m):
    matrix += [0]
# initialize the matrix
for i in range (0,m):
    matrix[i] = [0]*n
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)

您可以通过这种方式接受python中的2D列表。。。

简单地

arr2d = [[j for j in input().strip()] for i in range(n)] 
# n is no of rows


字符

n = int(input().strip())
m = int(input().strip())
a = [[0]*n for _ in range(m)]
for i in range(n):
    a[i] = list(input().strip())
print(a)

或者

n = int(input().strip())
n = int(input().strip())
a = []
for i in range(n):
    a[i].append(list(input().strip()))
print(a)

对于数字

n = int(input().strip())
m = int(input().strip())
a = [[0]*n for _ in range(m)]
for i in range(n):
    a[i] = [int(j) for j in input().strip().split(" ")]
print(a)

其中n是列中的元素数,m是行中的元素数。

以pythonic的方式,这将创建列表列表

问题出在初始化步骤上。

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]

另见:

希望能有所帮助。

相关问题 更多 >