2011-11-27 79 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