如何填充二维数组 [duplicate]

how to fill a two dimensional array [duplicate]

提问人:narcel 提问时间:10/25/2023 更新时间:10/25/2023 访问量:45

问:

我有一个使用特殊算法填充二维数组的代码 当我运行代码时,由于某种原因,在“c[i][b] = d”行上,不仅可迭代元素的值会更改,而且所有其他元素的值也会更改,也就是说,如果我更改了元素 c[0][1] 的值, 然后所有元素中的值都会改变:C[0][1]、C[1][1]、C[2][1] 等 为什么会发生这种情况以及如何解决?

k = 8
colors = 3
main = 1

a = 0
default = 0
d = 0
c = [[0] * k] * n

for i in range(n):
    default += 1
    if default == colors + 1:
        default = 1
    a = default
    
    for b in range(k):
        d = a
        c[i][b] = d
        a += 1
        if a == colors + 1:
            a = 1 ``

评论

0赞 Suraj Shourie 10/25/2023
发生这种情况是因为您初始化了 cc = [[0] * k] * n
0赞 John Gordon 10/25/2023
c = [[0] * k] * n这将生成对同一内部列表的相同引用。n

答:

1赞 AKX 10/25/2023 #1
c = [[0] * k] * n

创建单个列表的实例列表。n[0] * k

你会想要的

c = [[0] * k for _ in range(n)]

具有唯一的列表(因为将针对 的每次迭代单独计算)。[0] * kfor _ in range(n)