Я сталкивался с проблемой в Python, формат ввода массива 2d для чтения

3           # number of rows and columns of a square matrix
1 2 3       # first row 
3 4 6       # second row
4 6 3       # third row

Как мне прочитать 2d массив из консоли, как указано выше

Версия Python: 3.6

IDE: Spyder (Python 3.6)

0
Sai Yerni Akhil 16 Сен 2018 в 14:54

2 ответа

Лучший ответ

Если числа разделены одним пробелом, вы можете использовать следующий код:

n = int(input())
matrix = []
for i in range(n):
  row = [int(x) for x in input().split()]
  matrix.append(row)

Если у вас другой разделитель, то пробел вы можете указать в качестве аргумента в функции split().

0
tdelev 16 Сен 2018 в 13:08
n = int(input())
matrix = dict()
for i in range(n):
    matrix["row"+str(i)] = input().split() # i assume you want the numbers seperated too

Это принимает количество строк ввода, которое вы хотите сделать словарь с количеством входов, которые вы сказали изначально

Так матрица словарь сейчас

{'row0': ['1', '2', '3', '4'], 
'row1': ['3', '4', '6', '9'], 
'row2': ['4', '6', '3', '1']}

Если вы хотите, чтобы они хранились как целые числа

n = int(input())
matrix = dict()
for i in range(n):
    matrix["row"+str(i)] = [int(i) for i in input().split()]

< Сильный > Выход

{'row0': [1, 2, 3, 4], 
'row1': [3, 4, 6, 9], 
'row2': [4, 6, 3, 1]}

Или в качестве единственного, который просто выводит список списков

[[int(i) for i in input().split()] for _ in range(int(input()))]

< Сильный > Выход

[[1, 2, 3, 4], [3, 4, 6, 9], [4, 6, 3, 1]]

Или как словарь

{'row'+str(q) : [int(i) for i in input().split()] for q in range(int(input()))}

< Сильный > Выход

{'row0': [1, 2, 3, 4], 'row1': [3, 4, 6, 9], 'row2': [4, 6, 3, 1]}

И, как отметил Патрик, быстрый

{q : [int(i) for i in input().split()] for q in range(int(input()))}

< Сильный > Выход

{1: [1, 2, 3, 4], 2: [3, 4, 6, 9], 3: [4, 6, 3, 1]}

Это решение быстрее, потому что словари используют хэши, и, таким образом, не нужно перебирать весь список, прежде чем перейти к нужному индексу.

2
Jonas Wolff 16 Сен 2018 в 13:13