迭代多维列表,结果没有意义

5 浏览
0 Comments

迭代多维列表,结果没有意义

有人能解释一下为什么这段代码(Python 2.7):

k=0
img = [[0]*4]*5
for i in xrange(len(img)):
    for j in xrange(len(img[0])):
        k+=1
        img[i][j] = k
print(img)

结果是这样的:

[[17, 18, 19, 20], 
 [17, 18, 19, 20],
 [17, 18, 19, 20],
 [17, 18, 19, 20],
 [17, 18, 19, 20]]

而不是这样的:

[[1, 2, 3, 4], 
 [5, 6, 7, 8],
 [9, 10, 11, 12],
 [13, 14, 15, 16],
 [17, 18, 19, 20]]

我不确定我错了什么...?

0
0 Comments

问题的原因是在初始化多维列表时,使用了错误的方法。在这里,使用了img = [[0]*4]*5的方式来创建多维列表。这种方式实际上是创建了一个对数组的引用,而不是创建一个新的数组(用于第二个维度)。这就解释了为什么最后一行在迭代中被复制了多次,因为它是最后一个被迭代的行。

对不起,我没有完全理解。你能解释一下'creating a reference'是什么意思吗?

问题不在于编辑,而是在于初始化。你需要使用img = [[0 for i in range(4)] for j in range(5)]这种方式来创建你期望的多维列表。

0