使用for循环和direct方法的列表列表中出现初始化错误



我正在为同心矩形编写代码,并将"result"变量初始化为

[[0表示范围(array_size(中的x]表示范围(array_size(中的y],

我得到了正确的答案。然而,当我将"result"变量初始化为[[0]*array_size]*array_size时,我得到了错误的答案。对于这两种情况,我的其余程序是相同的:

class Solution:
def concentric(self, A):
array_size = 2*A - 1
result = [[0 for x in range(array_size)]
for y in range(array_size)];
#[[0]*array_size]*array_size

for i in range(array_size):
for j in range(array_size):
if (abs(i-(array_size//2)) > abs(j-(array_size//2))):
result[i][j] = abs(i - array_size//2)+1;
else:
result[i][j] = abs(j - array_size//2)+1;
return result
Solution().concentric(3)

输出如下:

[[3, 3, 3, 3, 3], [3, 2, 2, 2, 3], [3, 2, 1, 2, 3], [3, 2, 2, 2, 3], [3, 3, 3, 3, 3]]

任何建议或解释都将不胜感激。

执行此操作时:

[[0]*array_size]*array_size

您不是在创建一个由N个不同列表组成的列表。相反,您正在创建一个列表,其中包含对SAME列表的N个引用。如果修改其中任何一个,则修改所有这些。无法使用*运算符初始化列表列表。

通常,我发现最好创建一个空列表,并在创建行时逐个添加行。

在第二次初始化中,每一行都指向相同的列表。因此,当您修改一行中的元素时,有效地修改了所有行中的该元素。这可以通过以下示例进行验证。`

In [19]: a = [[0]*2]*2
In [20]: a
Out[20]: [[0, 0], [0, 0]]
In [21]: a[0] is a[1]
Out[21]: True
In [22]: a[1]
Out[22]: [0, 0]
In [23]: a[1][0]
Out[23]: 0
In [24]: a[1][0] = 1
In [25]: a[0] is a[1]
Out[25]: True
In [26]: a[0]
Out[26]: [1, 0]

最新更新