все Python 3Списки (list)понятие
Вложенные списки / матрицы
матрицы
Список списков используется как двумерная матрица. Доступ через двойной индекс matrix[row][col].
Синтаксис
matrix[i][j] | [[val]*cols for _ in range(rows)]
Главная ловушка — [[0] * cols] * rows: внешнее умножение копирует ссылку, все строки оказываются одним и тем же списком, и запись в одну ячейку меняет весь столбец. Надёжный способ — генератор списков, где новая строка создаётся на каждой итерации. Индексы идут в порядке matrix[строка][столбец], а прямоугольность никто не проверяет: строки могут быть разной длины, и заметите вы это только по IndexError.
Примеры
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
print(matrix[1][2]) # → 6
for row in matrix:
print(row) # → [1, 2, 3] / [4, 5, 6] / [7, 8, 9]
zeros = [[0] * 3 for _ in range(3)] # не [[0] * 3] * 3: там одна строка трижды
zeros[0][0] = 1
print(zeros) # → [[1, 0, 0], [0, 0, 0], [0, 0, 0]]
m = [[i + j for j in range(3)] for i in range(3)]
print(m) # → [[0, 1, 2], [1, 2, 3], [2, 3, 4]]
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
print([[row[i] for row in matrix] for i in range(3)]) # → [[1, 4, 7], [2, 5, 8], [3, 6, 9]]
print([val for row in matrix for val in row]) # → [1, 2, 3, 4, 5, 6, 7, 8, 9]
print([matrix[i][i] for i in range(3)]) # → [1, 5, 9]
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности