web-dev-qa-db-ja.com

Pythonで行列(2Dリスト)を入力する方法は?

このコードを作成して、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)
8
Iqazra

問題は初期化ステップにあります。

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]

こちらもご覧ください:

お役に立てば幸いです。

11
alecxe

python this way ...で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は行の要素ではありません。

Pythonの方法では、これはリストのリストを作成します

7
Ani

受け入れられた答えとは別に、次の方法で行を初期化することもできます-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)
2
Arik Pamnani

このコードは、ユーザーから行と列の数を取得し、要素を取得してマトリックスとして表示します。

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)
1

各行にスペースで区切られたm個の整数が含まれるn行の入力を取得する場合:

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]) 

O/Pは、0ベースのインデックス付けでは5です

1
Jatin batra

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

マトリックス= [[int(j)for input()。split()[:n]] for i in range(m)]

行列のiの場合:print(i)

1
Max Amiri

マトリックスが以下のような行形式で与えられている場合、サイズは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」になります

1
Abhishek Yadav

私は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]])

出力

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]]など。

0
Aivar Paalberg
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']]

0
Deepak Kumar
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]]

0
Sitabja Pal

入力がこのようにフォーマットされている場合、

1 2 3
4 5 6
7 8 9

1つのライナーを使用できます

mat = [list(map(int,input().split())) for i in range(row)]
0
Julkar9
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)
0
Mahesh Kumar
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]

注:control.itの場合、このコードはnoのみを制御します。行のうち、必要な数の列を入力できます。つまり、row[0]=2 ので注意してください。これは、列を制御できないコードではありません。

0
kundan pandey
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])

完全に動作します

0
ojhastar01