2011-11-27 97 views
1

我是Python中的初學者。動態規劃解決coin change problem需要一個初始化表,基本上可以,例如,是這樣的:Python中簡單表的奇怪行爲

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

哪個表我規定是這樣的:

table=[[1]+[0]*3]*3 

現在,如果我寫

table[1][2]=1 
for x in table: print x 

我得到的打印:

[1, 0, 2, 0] 
[1, 0, 2, 0] 
[1, 0, 2, 0] 

我沒有該死的線索爲什麼整個列被改變而不是指定的數字。

回答

2

錯誤出現在您未顯示的代碼中。據推測,你喜歡初始化

a = [1, 0, 0, 0] 
table = [a, a, a] 

table = [[1, 0, 0, 0]] * 3 

或等價的東西,從而導致含三次相同的列表對象名單列表。如果修改這個單個對象,它會在它引用的任何地方更改,因爲它只是一個對象。

如果您需要更多詳細信息,請向我們展示創建表格的代碼。

初始化table的正確方法是

table = [[1, 0, 0, 0] for i in range(3)] 

或者乾脆

table = [[1, 0, 0, 0], [1, 0, 0, 0], [1, 0, 0, 0]] 
+1

@AndrásKovács:歡迎來到SO。您的新問題已在我的帖子中得到解答。 –

0

這工作:

t = [ 
    [1,0,0,0], 
    [1,0,0,0], 
    [1,0,0,0], 
] 

t[1][2]=1 
for x in t: print x