每行都指向同一个子列表。这是重复附加相同子列表的结果。因此,当您修改一行时,您最终也会修改其他行。
我会这样做:
ncols = 12
nrows = 8
matrix = [[0] * ncols for i in range(nrows)]
matrix[2][0] = 5
matrix
包含:
[[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]
关于编码风格的旁白:在 Python 中,在名称中包含对象的类型是一种糟糕的形式。我选择重命名int_NumbOfColumns
as ncols
。如果您需要更具描述性的内容,请使用类似column_count
。一般来说,应避免混合大小写名称,而类名通常使用驼峰命名法。看PEP 8——Python 代码风格指南 http://www.python.org/dev/peps/pep-0008/了解更多。
Edit:既然你提到你是Python新手,这里有更多的解释。
这是一个列表理解 http://docs.python.org/tutorial/datastructures.html#list-comprehensions:
matrix = [[0] * ncols for i in range(nrows)]
它也可以写成一个常规的 for 循环:
matrix = []
for i in range(nrows):
matrix.append([0] * ncols)