将新项目附加到列表中的列表

时间:2011-07-25 10:29:12

标签: python list append

我正在尝试将新的float元素追加到另一个列表中的列表中,例如:

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

我得到以下内容:

print list
[[2.5], [2.5]]

当我想要:

[[], [2.5]]

我该怎么做?

提前致谢。

8 个答案:

答案 0 :(得分:17)

lst = [[] for _ in xrange(2)](或仅[[], []])。不要使用与可变对象的乘法 - 你得到相同的X次,而不是X次。

答案 1 :(得分:5)

list_list = [[] for Null in range(2)]

不要将其称为list,这会阻止您调用内置函数list()

您的问题发生的原因是Python创建一个列表然后重复两次。因此,无论您是通过list_list[0]还是list_list[1]访问它来追加它,您都会做同样的事情,因此您的更改将出现在两个索引处。

答案 2 :(得分:3)

你可以用最简单的方式做到....

>>> list = [[]]*2
>>> list[1] = [2.5]
>>> list
[[], [2.5]]

答案 3 :(得分:2)

list = [[]]
list.append([2.5])

list = [[],[]]
list[1].append(2.5)

答案 4 :(得分:2)

[]是一个列表构造函数,在[[]]中构造一个列表和一个子列表。 *2复制对内部列表的引用,但不构造新列表:

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

解决方案是拥有2个内部列表list = [[], []]

答案 5 :(得分:2)

根据@Cat Plus Plus,不要使用乘法。我尝试没有它。使用相同的代码。

>> list = [[],[]]
>> list[1].append(2.5)
>> list
>> [[],[2.5]]

答案 6 :(得分:1)

你应该这样写:

>>> l = [[] for _ in xrange(2)]
>>> l[1].append(2.5)
>>> l
[[], [2.5]]

答案 7 :(得分:0)

你的outter列表包含另一个列表,并且乘以outter列表将使得结果列表的项目都具有指向内部列表的相同指针。 您可以递归创建多维列表,如下所示:

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)
  

[[]]