gpt4 book ai didi

python - 按行主要顺序填充二维矩阵

转载 作者:行者123 更新时间:2023-12-04 17:25:15 24 4
gpt4 key购买 nike

我尝试在这种方法中使用 python 中的列表制作一个二维数组:

N = 3
A = [[0]*N]*N
for i in range(N):
for j in range(N):
A[i][j] = (i*N + j+1)
print (A)

输出是:

[[7, 8, 9], [7, 8, 9], [7, 8, 9]]

我想要这样的输出:

[[1, 2, 3], [4, 5, 6], [7, 8, 9]]

谁能告诉我这段代码有什么问题吗?

最佳答案

问题是你使用A = [[0]*N]*N 来初始化A。这是引用复制方法!这意味着 A 中的元素指向内存中的同一个单元格,因此,当您为 A 赋值时,您将该相同的值赋给了 A 中的多个单元格!更准确地说,您的代码中发生的是 i 的最终循环用 [7 8 9] 覆盖了所有先前的写入结果,因此您得到 [[7,8,9], [7,8,9], [7,8,9]] 而不是 [[1, 2, 3], [4, 5, 6], [7, 8, 9].

这是一个修复,它在没有引用的情况下初始化 A:

N = 3
A = [[[0] for k in range(N)] for m in range(N)]
for i in range(N):
for j in range(N):
A[i][j] = (i*N + j+1)
print (A)

如上使用列表推导式初始化 A 时,A 中的每个单元格都指向内存中的不同位置,因此结果如您所愿:

[[1, 2, 3], [4, 5, 6], [7, 8, 9]

关于python - 按行主要顺序填充二维矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63758415/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com