Добавить новый элемент в список в списке - PullRequest
7 голосов
/ 25 июля 2011

Я пытаюсь добавить новый элемент с плавающей точкой в ​​список в другом списке, например:

list = [[]]*2
list[1].append(2.5)

И получаю следующее:

print list
[[2.5], [2.5]]

Когда я 'Я хотел бы получить:

[[], [2.5]]

Как я могу это сделать?

Заранее спасибо.

Ответы [ 8 ]

17 голосов
/ 25 июля 2011

lst = [[] for _ in xrange(2)] (или просто [[], []]).Не используйте умножение с изменяемыми объектами - вы получаете один и тот же X раз, а не X разных.

5 голосов
/ 25 июля 2011
list_list = [[] for Null in range(2)]

не называйте его list, это не позволит вам вызвать встроенную функцию list().

Причиной возникновения вашей проблемы является то, что Python создает один список , а затем повторяет его дважды. Таким образом, независимо от того, добавляете ли вы его с помощью list_list[0] или list_list[1], вы делаете одно и то же, поэтому ваши изменения будут отображаться в обоих индексах.

3 голосов
/ 21 октября 2011

Вы можете сделать самым простым способом ....

>>> list = [[]]*2
>>> list[1] = [2.5]
>>> list
[[], [2.5]]
2 голосов
/ 25 июля 2011

В соответствии с @Cat Plus Plus не используйте умножение. Я пробовал без него. С тем же вашим кодом.

>> list = [[],[]]
>> list[1].append(2.5)
>> list
>> [[],[2.5]]
2 голосов
/ 25 июля 2011

[] является конструктором списка, а в [[]] создается список и подсписок. *2 дублирует ссылку на внутренний список, но новый список не создается:

>>> list[0] is list[1]
... True
>>> list[0] is []
... False

Решение состоит в том, чтобы иметь 2 внутренних списка, list = [[], []]

2 голосов
/ 25 июля 2011
list = [[]]
list.append([2.5])

или

list = [[],[]]
list[1].append(2.5)
1 голос
/ 25 июля 2011

вы должны написать что-то вроде этого:

>>> l = [[] for _ in xrange(2)]
>>> l[1].append(2.5)
>>> l
[[], [2.5]]
0 голосов
/ 25 июля 2011

Ваш внешний список содержит другой список, и при умножении внешнего списка все элементы полученного списка будут иметь одинаковый указатель на внутренний список.Вы можете создать многомерный список рекурсивно следующим образом:

def MultiDimensionalList(instance, *dimensions):
    if len(dimensions) == 1:
      return list(
         instance() for i in xrange(
          dimensions[0]
        )
      )
    else:
      return list(
        MultiDimensionalList(instance, *dimensions[1:]) for i
        in xrange(dimensions[0])
      )

print MultiDimensionalList(lambda: None, 1, 1, 0)

[[]]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...