[英]I am trying to assign elements from one 2d array to another 2d array in python
所以我将我的问题分为两部分,这两部分应该能够用相同的解决方案来解决。 第 1 部分是我在测试代码时最初遇到的问题。 我试图将一个二维数组中的元素分配给另一个数组,但它只将最后一个元素分配给数组。 第 2 部分是我稍后将面临但仍然相关的问题。
- -第1部分 - -
a = [[1,2,3],[4,5,6],[7,8,9]]
b = [[None]*4]*4
yval=0
for y in a:
xval = 0
for x in y:
b[yval][xval] = x
xval+=1
yval+=1
print("Grid A:")
print(a)
print("Grid B:")
print(b)
我的输出
Grid A:
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
Grid B:
[[7, 8, 9, None], [7, 8, 9, None], [7, 8, 9, None], [7, 8, 9, None]]
我的目标
Grid A:
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
Grid B:
[[1, 2, 3, None], [4, 5, 6, None], [7, 8, 9, None], [None, None, None, None]]
我真的不明白是什么导致b 中的每个子数组都被分配了相同的元素。 即使最初的 for 循环只迭代 3 次,也包括最后一个。 现在在 python 中可能有一种更简单的方法来做到这一点,但我还需要能够将一张桌子移到另一张桌子上,但也在不同的位置。
- - 第2部分 - -
例如,假设我有一个 2x2 数组
[[a,b],
[光盘]]
我想把它放在 4x4 数组的右下角
[[ , , , ],
[ , , , ],
[ , , , ],
[ , , , ]]
我的代码是
a = [[1,2],[3,4]]
b = [[None]*4]*4
yval=0
for y in a:
xval = 0
for x in y:
b[yval+2][xval + 2] = x
xval+=1
yval+=1
print("Grid A:")
print(a)
print("Grid B:")
print(b)
我的目标是
[[ , , , ],
[ , , , ],
[ , , a, b],
[, ,c,d]]
然而我的实际结果是
[[, ,c,d],
[ , , c, d],
[ , , c, d],
[, ,c,d]]
问题来自 b 的定义,其中定义的列表是 4 次相同子列表的列表,如下面的代码所示
b = [[None]*4]*4
b[0][0] = 1
print(b)
产出
[[1, None, None, None],
[1, None, None, None],
[1, None, None, None],
[1, None, None, None]]
b = [[None]*4 for _ in range(4)]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.