PYTHON. Двумерные массивы. Двумерные массивы или матрица — это набор однотипных данных, имеющий общее имя, доступ к элементам которого осуществляется по двум индексам. В языке программирования Python таблицу можно представить в виде списка строк, каждый элемент которого является в свою очередь списком, например, чисел. Приведём таблицу, в которой создаётся числовая таблица из двух строк и трех столбцов, с которой производятся различные действия.
1 | 2 | 3 |
4 | 5 | 6 |
Представим таблицу в виде кода:
1 2 3 4 5 6 7 8 9 10 11 12 |
a = [[1, 2, 3], [4, 5, 6]] print(a[0]) print(a[1]) b = a[0] print(b) print(a[0][2]) a[0][1] = 7 print(a) print(b) b[2] = 9 print(a[0]) print(b) |
Здесь первая строка списка a[0]
является списком из чисел [1, 2, 3]
. То есть a[0][0] == 1
, значение a[0][1] == 2
, a[0][2] == 3
, a[1][0] == 4
, a[1][1] == 5
, a[1][2] == 6
.
Продемонстрируем, как выводить двумерный массив, используя это удобное свойство цикла for
:
1 2 3 4 5 |
a = [[1, 2, 3, 4], [5, 6], [7, 8, 9]] for row in a: for elem in row: print(elem, end=' ') print() |
Естественно, для вывода одной строки можно воспользоваться методом join()
:
1 2 |
for row in a: print(' '.join([str(elem) for elem in row])) |
Пусть программа получает на вход двумерный массив в виде n
строк, каждая из которых содержит m
чисел, разделенных пробелами. Считать их можно следующим образом:
1 2 3 4 5 |
# в первой строке ввода идёт количество строк массива n = int(input()) a = [] for i in range(n): a.append([int(j) for j in input().split()]) |
Можно сделать то же самое и при помощи генератора:
1 2 3 |
# в первой строке ввода идёт количество строк массива n = int(input()) a = [[int(j) for j in input().split()] for i in range(n)] |
Для создания двумерных массивов можно использовать вложенные генераторы, разместив генератор списка, являющегося строкой, внутри генератора всех строк. Напомним, что сделать список из n
строк и m
столбцов можно при помощи генератора, создающего список из n
элементов, каждый элемент которого является списком из m
нулей:
1 |
[[0] * m for i in range(n)] |
Но при этом внутренний список также можно создать при помощи, например, такого генератора: [0 for j in range(m)]
. Вложив один генератор в другой, получим вложенные генераторы:
1 |
[[0 for j in range(m)] for i in range(n)] |
Но если число 0 заменить на некоторое выражение, зависящее от i
(номер строки) и j
(номер столбца), то можно получить список, заполненный по некоторой формуле.
Например, пусть нужно задать следующий массив (для удобства добавлены дополнительные пробелы между элементами):
1 2 3 4 5 |
0 0 0 0 0 0 0 1 2 3 4 5 0 2 4 6 8 10 0 3 6 9 12 15 0 4 8 12 16 20 |
В этом массиве n = 5
строк, m = 6
столбцов, и элемент в строке i
и столбце j
вычисляется по формуле: a[i][j] = i * j
.
Для создания такого массива можно использовать генератор:
1 |
[[i * j for j in range(m)] for i in range(n)] |