Python中简单表的奇怪行为

时间:2011-11-27 19:24:10

标签: python matrix

我是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]

我不知道为什么整个列都会被更改而不是指定的数字。

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 :(得分:0)

这有效:

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

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