无法理解此 Python 语法

Can't understand this Python syntax

max_rows = 8
max_cols = 4

matrix = [[1] * max_cols for _ in range(max_rows)]

我不明白这个矩阵是怎么回事,有人能解释一下吗?

这是一种列表理解,一种创建列表的方式。

这相当于:

max_rows = 8
max_cols = 4
matrix = []
for _ in range(max_rows):
    matrix.append([1] * max_cols)

但在 execution-time.

时写起来更短更快

_是一种命名未使用的循环变量的方式。

叫做'list comprehension'

[1] * max_cols

创建 1max_cols 次的列表,即 [1, 1, ..., 1] max_cols 次。

[[1] * max_cols for _ in range(max_rows)]

获取创建的列表 [1, 1, ..., 1] 并将其复制 max_rows 次(就像它在 for-loop 中一样)。

注意:出现了一个有趣的问题:为什么不直接 [[1] * max_cols] * max_rows

答案是 [...] * n 正在复制 [...]n 次的地址,因此,每次更改数组之一(指向 [=18= 的指针) ]) 将出现在所有数组中