all Python 3Lists (list)term
Nested lists / matrices
matrices
A list of lists is used as a two-dimensional matrix. Items are reached through a double index, matrix[row][col].
Syntax
matrix[i][j] | [[val]*cols for _ in range(rows)]
The classic trap is [[0] * cols] * rows: the outer multiplication copies a reference, so every row is the same list and writing one cell changes a whole column. Build rows with a list comprehension instead, so each iteration creates a fresh row. Indexing goes matrix[row][col], and nothing enforces a rectangle — rows may differ in length, and you usually find out via IndexError.
Examples
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]
See also
Open in the full glossarydocs.python.orgReport an inaccuracy