我读如何看待一个计算机科学家,这是“Python编程”的介绍文字。
我要说明的乘法运算符(的行为*
当应用到列表)。
考虑函数make_matrix
def make_matrix(rows, columns):
"""
>>> make_matrix(4, 2)
[[0, 0], [0, 0], [0, 0], [0, 0]]
>>> m = make_matrix(4, 2)
>>> m[1][1] = 7
>>> m
[[0, 0], [0, 7], [0, 0], [0, 0]]
"""
return [[0] * columns] * rows
实际产量
[[0, 7], [0, 7], [0, 7], [0, 7]]
make_matrix的正确版本是:
def make_matrix(rows, columns):
"""
>>> make_matrix(3, 5)
[[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]
>>> make_matrix(4, 2)
[[0, 0], [0, 0], [0, 0], [0, 0]]
>>> m = make_matrix(4, 2)
>>> m[1][1] = 7
>>> m
[[0, 0], [0, 7], [0, 0], [0, 0]]
"""
matrix = []
for row in range(rows):
matrix += [[0] * columns]
return matrix
为什么make_matrix的第一个版本出现故障(如在9.8书中解释)的原因是,
......每行是其他行的名称...
我想知道为什么
[[0] * columns] * rows
使...每行是其他行的名称...
但不是
[[0] * columns]
即为什么每个[0]
连续不是其他行元件的别名。