簡體   English   中英

附加到Python中的2D列表

[英]Appending to 2D lists in Python

我遇到了我認為Python中的一個奇怪的行為,我希望有人在可能的情況下解釋它。

我創建了一個空的2D列表

listy = [[]]*3

print listy

[[], [], []]

以下工作正如我所料:

listy[1] = [1,2] [[], [1,2], []]

listy[1].append(3) yield [[], [1,2,3], []]

但是,當我附加到其中一個空列表時,python會附加到所有子列表,如下所示:

listy[2].append(1) [[1], [1,2,3], [1]]

誰能向我解釋為什么會出現這種情況?

您尚未創建三個不同的空列表。 您已經創建了一個空列表,然后創建了一個新列表,其中包含對同一個空列表的三個引用。 要解決此問題,請使用以下代碼:

listy = [[] for i in range(3)]

現在運行示例代碼可以得到您可能期望的結果:

>>> listy = [[] for i in range(3)]
>>> listy[1] = [1,2]
>>> listy
[[], [1, 2], []]
>>> listy[1].append(3)
>>> listy
[[], [1, 2, 3], []]
>>> listy[2].append(1)
>>> listy
[[], [1, 2, 3], [1]]

[[]]*3[[], [], []]

就像你說的那樣

a = []
listy = [a, a, a]

換句話說,所有三個列表引用都引用相同的列表實例。

來到這里是為了了解如何將項目附加到2D數組,但是線程的標題有點誤導,因為它正在探索附加的問題。

我發現附加到2D列表的最簡單方法是這樣的:

列表= [[]]

list.append((VAR_1,VAR_2))

這將導致輸入2變量var_1,var_2。 希望這可以幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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