2013-10-08 97 views
7

我想要一个变量,这是一个我可以稍后填写的空列表的嵌套列表。一些看起来像:如何在python中创建多个空嵌套列表

my_variable=[[], [], [], []] 

不过,我不知道提前多少名单,我需要,只在创建步骤,所以我需要一个变量a,以确定它。 我想到了简单的my_variable=[[]]*a,但创建了列表的副本,这不是我想要的。

我可以这样做:

my_variable=[] 
for x in range(a): 
    my_variable.append([]) 

,但我正在寻找一个更优雅的解决方案(最好是一个班轮)。有没有?

+3

我认为你需要重新考虑这一点,这似乎可以更好地使用你的需要的字典。请教[这篇文章](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem) –

+4

'my_variable = [[] for _ in xrange(a)]' – inspectorG4dget

+4

可能的重复[Python列表索引](http://stackoverflow.com/questions/13058458/python-list-index),[在制作指定大小的列表时遇到问题](http://stackoverflow.com/q/17411892 )和[为什么我不能只更改Python中嵌套列表中的单个元素](http://stackoverflow.com/q/10941032) –

回答

12

尝试list comprehension

lst = [[] for _ in xrange(a)] 

见下文:

>>> a = 3 
>>> lst = [[] for _ in xrange(a)] 
>>> lst 
[[], [], []] 
>>> a = 10 
>>> lst = [[] for _ in xrange(a)] 
>>> lst 
[[], [], [], [], [], [], [], [], [], []] 
>>> # This is to prove that each of the lists in lst is unique 
>>> lst[0].append(1) 
>>> lst 
[[1], [], [], [], [], [], [], [], [], []] 
>>> 

不过请注意,以上就是Python 2.x版本在Python的3.x的,因为xrange被删除,你会想这样的:

lst = [[] for _ in range(a)] 
+0

我桅杆已经黑了,我没有想过以前的列表理解。 :)但是,我想知道为什么Python 2.x上的'xrange'比'range'更好?他们都是一样的,不是吗? –

+1

@ AndyS.c。 - 实际上不。在Python 2.x中,'xrange'(返回一个xrange迭代器)比'range'(返回一个列表)快。在Python 3.x中。然而,'范围'是为了做'xrange'做的,所以'xrange'被删除了。这里是一个参考:http:// stackoverflow。com/questions/135041 /应该你永远有利于xrange超范围 – iCodez

6
>>>[[] for x in range(10)] #To make a list of n different lists, do this: 
[[], [], [], [], [], [], [], [], [], []] 

编辑: -

[[]]*10 

这会给你同样的结果一样,但上面的清单是不是不同的实例,它们只是对同一个实例的n个引用。

+4

这将有助于证明这是不同于'[[]] * 10' – inspectorG4dget

+0

你是好的,我错过了它。 – Nullify

+2

考虑扩大你的答案,向提问者解释为什么这达到了预期的结果,可能链接到文档。如此,这仅仅是有用的。 –

相关问题