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

Python 将新项附加到列表中的列表,python,list,append,Python,List,Append,我试图将一个新的float元素附加到另一个列表中的列表中,例如: list = [[]]*2 list[1].append(2.5) 我得到以下信息: print list [[2.5], [2.5]] 当我想得到: [[], [2.5]] 我该怎么做 提前谢谢 list = [[]] list.append([2.5]) 或 lst=[[]用于xrange(2)](或者只是[[],[]])。不要对可变对象使用乘法-你得到的是相同的X次,而不是X次不同的 list_list = [[]

我试图将一个新的float元素附加到另一个列表中的列表中,例如:

list = [[]]*2
list[1].append(2.5)
我得到以下信息:

print list
[[2.5], [2.5]]
当我想得到:

[[], [2.5]]
我该怎么做

提前谢谢

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


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

list_list = [[] for Null in range(2)]
不要调用它
list
,这将阻止您调用内置函数
list()


出现问题的原因是Python创建一个列表,然后重复两次。因此,无论您是通过使用
list\u list[0]
访问它还是通过
list\u list[1]
访问它,您都在做同样的事情,因此您的更改将显示在两个索引中。

您应该这样写:

>>> l = [[] for _ in xrange(2)]
>>> l[1].append(2.5)
>>> l
[[], [2.5]]
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)

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

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

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

您的外部列表包含另一个列表,并且与外部列表相乘将使结果列表的项目都具有指向内部列表的相同指针。 您可以这样递归地创建多维列表:

>>> l = [[] for _ in xrange(2)]
>>> l[1].append(2.5)
>>> l
[[], [2.5]]
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)
[[]


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

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

你可以用最简单的方法

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

我建议不要使用
,因为它显然会搞乱一些交互式口译员。另外,不要将其称为
列表
,这是在屏蔽内置代码。此外,对于不可变对象,您也会得到相同的X倍,这通常并不重要,除非您以后要检查对象标识。@ag:
\uu
是标准的“我不关心这个变量”变量。交互模式使用它来存储最后的结果,但它肯定不会把任何事情搞砸。我知道它的用途。我现在忘了,但我相信这会打乱其中一个IDE的回溯。@agf:那就是那个IDE的一个bug。至少对我来说,通用代码样式更重要。@CatPlusPlus下划线经常在多语言应用程序中用作翻译程序,因此除非您从未处理过此类项目,否则使用它是一种不好的做法。正如agf在下面指出的,最好避免将
列表
用作变量名,因为它通常是内置列表类型的名称。通常使用“lst”是为了便于使用。但是允许您创建任何维度的列表。当然!过度设计的东西通常可以让你做“酷”的事情,但就最初的需求而言,大部分都是不需要的;-)