2016-11-22 181 views
0

我必須將同一個列表追加到另一個列表中多次,然後只修改其中的一個。 我試圖將同一個列表追加到另一個列表

list_a = [] 
list_b = [0,0,0] 
for x in range(3): 
    list_a.append(list_b) 

但問題是,如果我嘗試

list_a[0][0] = 1 

它修改list_a[1][0]list_a[2][0]也。 我該如何避免這種情況?

+2

'list_a.append(list_b [:])' - 追加拷貝' list_b'而不是原來的 – khelwood

+0

真的很感謝你! @khelwood –

+0

「我必須將同一列表追加到另一個不止一次」 - 現在,您已經多次向另一個追加了*相同的列表*,這就是問題所在。您需要製作多個列表,而不是重複使用同一個列表。 – user2357112

回答

0

使用以下命令:

list_a = [] 
list_b = [0,0,0] 
for x in range(3): 
    list_a.append(list_b[:]) 
1

更好地創建像這樣的列表,如果你想要的是創建空列表與所有0做法較爲:

my_list = [[0]*3 for _ in range(3)] 

我們來驗證結果是否它有與否相同的問題:

>>> my_list 
[[0, 0, 0], [0, 0, 0], [0, 0, 0]] 
>>> my_list[0][0] = 1 
>>> my_list 
[[1, 0, 0], [0, 0, 0], [0, 0, 0]] 
#^  ^  ^
# Yipee! value changed only once 

要知道你的代碼不是窩檢查:Python list of lists, changes reflected across sublists unexpectedly

0

您正在追加list_b三次,所以您要修改的是實際的list_b對象。你想要做的就是讓一個淺拷貝,這像這樣

list_a.append(list(list_b)) 

完成或這樣

list_a.append(list_b[:]) 
相關問題