我是Python的初学者。 coin change problem的动态编程解决方案需要一个初始化的表,基本上可以看起来像这样:
[
[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]
我不知道为什么整个列都会被更改而不是指定的数字。
答案 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 :(得分:0)
这有效:
t = [
[1,0,0,0],
[1,0,0,0],
[1,0,0,0],
]
t[1][2]=1
for x in t: print x