簡體   English   中英

我正在嘗試將元素從一個二維數組分配給 python 中的另一個二維數組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM