2016-01-21 130 views
2

我在將三維元素添加到三維列表中時遇到問題。相反,在一個地方(threeDimList[1][1])追加一個新的元素,它追加它的整個行(threeDimList[1][0]threeDimList[1][1]threeDimList[1][2])在這裏,是我的代碼:將元素附加到三維列表

threeDimList = [[[]]*(3) for i in range(3)] 
threeDimList[1][1].append(1) 
print(threeDimList) 

這給了我:

[[[], [], []], [[1], [1], [1]], [[], [], []]] 

而不是:

[[[], [], []], [[], [1], []], [[], [], []]] 
+1

可能的重複[如何將元素添加到3維數組在python](http://stackoverflow.com/questions/15448594/how-to-add-elements-to-3-dimensional-array-in-python ) – Altoyyr

+0

雖然被問到的問題是重複的,但遇到的問題是不同的。 – ncfirth

+0

@ncfirth我們仍然可以涉及標記的重複問題,這裏提供的答案與標記的問題類似。 – The6thSense

回答

5

問題是,[[]] * 3基本上創建一個列表,其中包含三個引用相同[]

你可以這樣做:

>>> a = [[] for i in range(3)] 
>>> a[0].append(1) 
>>> a 
[[1], [], []] 
>>> b = [[]] * 3 
>>> b[0].append(2) 
>>> b 
[[2], [2], [2]] 

a情況下,定列表理解,[]評估三次,所以你在內存中的每一個評價得到一個新的空列表對象。

b的情況下,[]被評估一次,包裝爲[[]],然後被複制。

+1

謝謝。所以基本上問題是創建列表。我對這個問題的解決方案如下:'threeDimList = [[[] for i in range(3)] for i in range(3)]' – Zaslon