我正在尝试将新的float元素追加到另一个列表中的列表中,例如:
list = [[]]*2
list[1].append(2.5)
我得到以下内容:
print list
[[2.5], [2.5]]
当我想要:
[[], [2.5]]
我该怎么做?
提前致谢。
答案 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)
[[]]