1
我试图做一些与列表的Python列表,但我发现了一些奇怪的索引。
如果我想创建一个2 * 2“矩阵”,我做Python列表索引
matrix = [[0]*2]*2
然后,如果我想使用,比如改变第一行第一列,
matrix[0][0] = 1
我会得到[[1,0],[1,0]]
,而不是[[1,0],[0,0]]
。有谁知道出了什么问题?
我试图做一些与列表的Python列表,但我发现了一些奇怪的索引。
如果我想创建一个2 * 2“矩阵”,我做Python列表索引
matrix = [[0]*2]*2
然后,如果我想使用,比如改变第一行第一列,
matrix[0][0] = 1
我会得到[[1,0],[1,0]]
,而不是[[1,0],[0,0]]
。有谁知道出了什么问题?
使用清单上的*
运营商创建一个浅拷贝,所以[[0]*2]*2
等同于以下内容:
inner = [0, 0]
matrix = [inner, inner]
由于matrix
两个位置都是相同的列表的引用,修改任何一个将修改另一个。相反,使用以下内容:
matrix = [[0]*2 for i in range(2)]
@DSM - 相当快...而这甚至不是你的答案。先生,干得好! – mgilson
令人难以置信的快速我会说:) –