【问题标题】:How to create a number of empty nested lists in python [duplicate]如何在python中创建多个空嵌套列表[重复]
【发布时间】:2013-10-15 11:08:53
【问题描述】:

我想要一个变量,它是多个空列表的嵌套列表,我可以稍后填写。看起来像:

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

但是,我事先不知道我需要多少个列表,只知道在创建步骤,因此我需要一个变量a 来确定它。 我想过简单的my_variable=[[]]*a,但这会创建列表的副本,这不是我想要的。

我能做到:

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

但我正在寻找更优雅的解决方案(最好是单线)。有吗?

【问题讨论】:

  • 我认为您需要重新考虑这一点,这似乎根据您的需要使用字典可能会更好。咨询this post
  • my_variable=[[] for _ in xrange(a)]
  • +1 到 Inbar Rose 的评论...我必须转换一些 perl 代码(您可以随时在其中实例化任何索引,python 不允许这样做.. x = [], x[ 4] = 1 在 perl 中有效,在 python 中抛出错误)。但是,只需将 x 设为字典,它的工作方式相同: x = {}, x[4] = 1 现在可以正常工作。你必须对键进行排序,但它们不会是单调的(即你可以有像 [0,3,4,7] 这样的索引)。
  • 你可能想要的东西:defaultdict(list).
  • 这是重复的

标签: python list nested-lists


【解决方案1】:

试试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)]

【讨论】:

  • 我的桅杆停电了,我以前没有考虑过列表理解。 :) 但是,我想知道为什么 Python 2.x 上的 xrangerange 更好?它们的工作原理相同,不是吗?
  • @AndyS.c. - 实际上不是。在 Python 2.x 中,xrange(返回 xrange 迭代器)比 range(返回列表)快。在 Python 3.x 中。然而,range 做了xrange 所做的事情,所以xrange 被删除了。这是一个参考:stackoverflow.com/questions/135041/…
【解决方案2】:
>>>[[] for x in range(10)] #To make a list of n different lists, do this:
[[], [], [], [], [], [], [], [], [], []]

编辑:-

[[]]*10

这将为您提供与上面相同的结果,但列表不是不同的实例,它们只是对同一实例的 n 引用。

【讨论】:

  • 这将有助于证明这与 [[]]*10 有何不同
  • 你很好。我错过了。
  • 考虑扩大你的答案,向提问者解释为什么这会达到预期的结果,可能链接到文档。事实上,这只是微不足道的用处。
  • @inspectorG4dget 它的不同之处如下:stackoverflow.com/questions/12791501/…
猜你喜欢
  • 1970-01-01
  • 2011-09-27
  • 2020-10-30
  • 1970-01-01
  • 2011-01-11
  • 2022-01-16
  • 2019-02-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多