2016-03-25 31 views
1

我有一個列表的列表,我想在迭代中更新每個列表。 我初始化我的名單如下:在迭代中更新列表的列表

my_list = [[0]*n]*n 

當我想更新內部列表,通過這樣的:

for i in range(something): 
    for j in range(anotherthing): 
     my_list[i][j] = something 

什麼情況是,整個列表被更新,而不是第i只列出在每次迭代中,例如[[1,2],[1,2]]。 我想要的是在第一次迭代時[[1,2],[0,0]]在初始化它時,並且在[[1,2],[values]]中。我究竟做錯了什麼?

回答

3

列表乘法運算符*不會創建副本,但會創建對同一數據的多個引用。而不是使用*的考慮使用內涵初始化列表:

my_list = [[0 for i in range(n)] for j in range(n)] 
0

使用此初始化列表的列表,它會正常工作。

x = [[0]*n for i in range(n)] 

原始代碼也會創建一個子列表列表,但每個子列表都會引用同一個對象。

注意:我正在使用Python3。如果您使用2,則可能需要使用xrange()而不是range()。