Python: замена элемента в списке списков (# 2) - PullRequest
11 голосов
/ 04 октября 2010

Предыдущий вопрос с таким же названием, как у меня был опубликован , с (я думаю) тем же вопросом, но в коде были другие проблемы. Я не смог определить, был ли этот случай идентичным моему или нет.

В любом случае, я хочу заменить элемент в списке в списке. Код:

myNestedList = [[0,0]]*4 # [[0, 0], [0, 0], [0, 0], [0, 0]]
myNestedList[1][1] = 5

Теперь я ожидаю:

[[0, 0], [0, 5], [0, 0], [0, 0]]

Но я получаю:

[[0, 5], [0, 5], [0, 5], [0, 5]]

Почему?

Это повторяется в командной строке. Python 3.1.2 (r312: 79147, 15 апреля 2010, 15:35:48) [GCC 4.4.3] на linux2

1 Ответ

17 голосов
/ 04 октября 2010

У вас есть четыре ссылки на один и тот же объект по * 4, вместо этого используйте списочное понимание с диапазоном для подсчета:

my_nested_list = [[0,0] for count in range(4)]
my_nested_list[1][1] = 5
print(my_nested_list)

Чтобы объяснить более конкретно проблему:

yourNestedList = [[0,0]]*4
yourNestedList[1][1] = 5
print('Original wrong: %s' % yourNestedList)

my_nested_list = [[0,0] for count in range(4)]
my_nested_list[1][1] = 5
print('Corrected: %s' % my_nested_list)

# your nested list is actually like this
one_list = [0,0]
your_nested_list = [ one_list for count in range(4) ]
one_list[1] = 5
print('Another way same: %s' % your_nested_list)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...