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

时间:2014-03-30 06:32:41

标签: python list input 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)

16 个答案:

答案 0 :(得分:11)

问题在于初始化步骤。

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]

另见:

希望有所帮助。

答案 1 :(得分:6)

你可以用这种方式接受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方式,这将创建列表

答案 2 :(得分:2)

除了接受的答案,您还可以按以下方式初始化您的行 - 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)

答案 3 :(得分:1)

此代码从用户获取行数和列数,然后获取元素并显示为矩阵。

m = int(input('number of rows, m : '))
n = int(input('number of columns, n : '))
a=[]
for i in range(1,m+1):
  b = []
  print("{0} Row".format(i))
  for j in range(1,n+1):
    b.append(int(input("{0} Column: " .format(j))))
  a.append(b)
print(a)

答案 4 :(得分:1)

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

1 2 3
4 5 6 
7 8 9 

然后您可以使用:

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

然后为上述输入打印任何内容:

print(a[1][1]) 

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

答案 5 :(得分:1)

您可以创建列表的任意尺寸

list=[]
n= int(input())
for i in range(0,n) :
    #num = input()
    list.append(input().split())
print(list)

输出:

code in shown with output

答案 6 :(得分:0)

rows, columns = list(map(int,input().split())) #input no. of row and column
b=[]
for i in range(rows):
    a=list(map(int,input().split()))
    b.append(a)
print(b)

输入

2 3
1 2 3
4 5 6

输出 [[1、2、3],[4、5、6]]

答案 7 :(得分:0)

如果矩阵按如下所示的行方式给出,则大小为s * s,此处s = 5 5 31 100 65 12 18 10 13 47 157 6 100 113 174 11 33 88 124 41 20 140 99 32 111 41 20

然后您可以使用此

s=int(input())
b=list(map(int,input().split()))
arr=[[b[j+s*i] for j in range(s)]for i in range(s)]

您的矩阵将为“ arr”

答案 8 :(得分:0)

a = []
b = []

m=input("enter no of rows: ")
n=input("enter no of coloumns: ")

for i in range(n):
     a = []
     for j in range(m):
         a.append(input())
     b.append(a)

输入:1 2 3 4 5 6 7 8 9

输出:[['1','2','3'],['4','5','6'],['7','8','9']]

答案 9 :(得分:0)

创建具有预填充数字的矩阵可以通过列表理解来完成。可能很难阅读,但可以完成工作:

rows = int(input('Number of rows: '))
cols = int(input('Number of columns: '))
matrix = [[i + cols * j for i in range(1, cols + 1)] for j in range(rows)]
具有2行3列的

矩阵将为[[1、2、3],[4、5、6]],具有3行2列的矩阵将为[[1、2],[3、4 ],[5、6]]等

答案 10 :(得分:0)

row=list(map(int,input().split())) #input no. of row and column
b=[]
for i in range(0,row[0]):
    print('value of i: ',i)
    a=list(map(int,input().split()))
    print(a)
    b.append(a)
print(b)
print(row)

输出:

2 3

value of i:0
1 2 4 5
[1, 2, 4, 5]
value of i:  1
2 4 5 6
[2, 4, 5, 6]
[[1, 2, 4, 5], [2, 4, 5, 6]]
[2, 3]

注意:在控制的情况下,此代码仅控制编号。在行中,但是我们可以输入任意数量的列,即row[0]=2,所以要小心。这不是您无法控制任何列的代码。

答案 11 :(得分:0)

m,n = map(int,input()。split())#m-行数; n-列数;

matrix = [[input()中j的int(j).split()[:n]]范围(m)中i的矩阵]

对于i在matrix:print(i)

答案 12 :(得分:0)

a,b=[],[]
n=int(input("Provide me size of squre matrix row==column : "))
for i in range(n):
   for j in range(n):
      b.append(int(input()))
    a.append(b)
    print("Here your {} column {}".format(i+1,a))
    b=[]
for m in range(n):
    print(a[m])

工作完美

答案 13 :(得分:0)

我使用了numpy库,对我来说很好用。它只是一行并且易于理解。 输入必须为单个大小,并用空格分隔,并且重新调整形状会将列表转换为所需的形状。这里(2,2)将4个元素的列表调整为2 * 2矩阵的大小。 请谨慎输入与矩阵尺寸相对应的相等数量的元素。

import numpy as np
a=np.array(list(map(int,input().strip().split(' ')))).reshape(2,2)

print(a)

输入

array([[1, 2],
       [3, 4]])

输出

答案 14 :(得分:0)

no_of_rows = 3  # For n by n, and even works for n by m but just give no of rows
matrix = [[int(j) for j in input().split()] for i in range(n)]
print(matrix)

答案 15 :(得分:0)

如果输入的格式如下,

1 2 3
4 5 6
7 8 9

可以使用一个衬纸

mat = [list(map(int,input().split())) for i in range(row)]