2016-08-11 76 views
0

我試圖更改嵌套列表中的特定項目時遇到了問題。我編寫的代碼是在Python 2.7中。 這就是我寫:在python中修改列表時出錯

list_1 = [] 
list_2 = [] 
infin = 25 
while infin != 0: 
    list_1.append((0,0,0)) 
    infin = infin - 1 
infin = 5 
while infin != 0: 
    list_2.append(list_1) 
    infin = infin - 1 

基本上它使一個列表,看起來像這樣:

[25元組],[25元組],[25元組],[25 元組],[25 元組]]

然後當我嘗試這樣做是爲了修改該列表:

list_2[0][0] = (1,1,1) 

在它25元組的每一個列表會(1,1,1)在一開始,不只是第一個。爲什麼?

回答

1

你實際上並沒有附加列表的不同實例,而是反覆附加引用到同一個列表。使用列表來避免這種情況。

list_1 = [] 
list_2 = [] 
infin = 25 
while infin != 0: 
    list_1.append((0,0,0)) 
    infin = infin - 1 
infin = 5 
while infin != 0: 
    list_2.append(list(list_1)) 
    infin = infin - 1 
2

因爲您追加了5次同一個清單list_1。您在list_1中更改的內容會打印5次,因爲該列表已添加5次。 如果你想要一個新的列表,使用方法:

list(list_1) 
1

list_1是一個對象。然後將該對象添加到另一個列表中5次,不會創建該對象的5個副本,而是創建5個對同一對象的引用。

你需要爲你創建第二個列表複製的清單:

infin = 5 
while infin != 0: 
    list_2.append(list(list_1)) 
    infin = infin - 1