如何在Python 3.4中输入矩阵(2D列表)?

Iqa*_*zra 8 python input list matrix

我是Python 3.4的新手,我通常使用MATLAB/GNU Octave进行矩阵计算.我知道我们可以在Python 2.x中使用numpy执行矩阵计算,但是numpy对Python 3.4不起作用.

我试图创建此代码以输入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)
Run Code Online (Sandbox Code Playgroud)

ale*_*cxe 11

问题出在初始化步骤上.

for i in range (0,m):
  matrix[i] = columns
Run Code Online (Sandbox Code Playgroud)

此代码实际上使您的每一行都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]]
Run Code Online (Sandbox Code Playgroud)

您可以在嵌套循环中初始化矩阵,如下所示:

matrix = []
for i in range(0,m):
    matrix.append([])
    for j in range(0,n):
        matrix[i].append(0)
Run Code Online (Sandbox Code Playgroud)

或者,使用列表理解在单行中:

matrix = [[0 for j in range(n)] for i in range(m)]
Run Code Online (Sandbox Code Playgroud)

要么:

matrix = [x[:] for x in [[0]*n]*m]
Run Code Online (Sandbox Code Playgroud)

也可以看看:

希望有所帮助.


Ani*_*Ani 7

你可以用这种方式接受python中的2D列表......

只是

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


对于角色

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)
Run Code Online (Sandbox Code Playgroud)

要么

n = int(input().strip())
n = int(input().strip())
a = []
for i in range(n):
    a[i].append(list(input().strip()))
print(a)
Run Code Online (Sandbox Code Playgroud)

对于数字

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)
Run Code Online (Sandbox Code Playgroud)

其中n不是列中的元素,而m不是行中的元素.

以pythonic方式,这将创建一个列表列表


小智 5

如果你想获取 n 行输入,其中每行包含 m 个空格分隔的整数,例如:

1 2 3
4 5 6 
7 8 9 
Run Code Online (Sandbox Code Playgroud)

然后你可以使用:

a=[] // declaration 
for i in range(0,n):   //where n is the no. of lines you want 
 a.append([int(j) for j in input().split()])  // for taking m space separated integers as input
Run Code Online (Sandbox Code Playgroud)

然后打印你想要的任何内容,如上面的输入:

print(a[1][1]) 
Run Code Online (Sandbox Code Playgroud)

对于基于 0 的索引,O/P 将为 5


Jul*_*ar9 5

如果输入的格式是这样的,

1 2 3
4 5 6
7 8 9
Run Code Online (Sandbox Code Playgroud)

可以使用一个衬垫

mat = [list(map(int,input().split())) for i in range(row)] 
Run Code Online (Sandbox Code Playgroud)

举例说明:

  1. input()接受一个字符串作为输入。“1 2 3”
  2. split()用空格分割字符串并返回
    字符串列表。[“1”、“2”、“3”]
  3. list(map(int, ...))将字符串列表转换/映射为整数列表。[1,2,3]
  4. 所有这些步骤都是按行时间完成的,并且这些列表存储在另一个列表中。[[1, 2, 3], [4, 5, 6], [7, 8, 9]], row = 3