Странное поведение простых таблиц в Python - PullRequest
1 голос
/ 27 ноября 2011

Я новичок в 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 ]

2 голосов
/ 27 ноября 2011

Ошибка в коде, который вы не показывали.Предположительно, вы инициализировали свой список как

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]]
0 голосов
/ 27 ноября 2011

Это работает:

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

t[1][2]=1
for x in t: print x
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...