【问题标题】:How can I make multiple empty lists in python?如何在 python 中创建多个空列表?
【发布时间】:2012-11-22 22:35:01
【问题描述】:

如何在不手动输入的情况下制作许多空列表

list1=[] , list2=[], list3=[]

是否有一个 for 循环可以让我产生“n”个这样的空列表?

【问题讨论】:

标签: python list empty-list


【解决方案1】:

列表理解在这里是最简单的:

>>> n = 5
>>> lists = [[] for _ in range(n)]
>>> lists
[[], [], [], [], []]

小心不要落入以下陷阱:

>>> lists = [[]] * 5
>>> lists
[[], [], [], [], []]
>>> lists[0].append(1)
>>> lists
[[1], [1], [1], [1], [1]]

【讨论】:

  • 天哪!我们是在同一时间发布的(头脑=吹)
  • @inspectorG4dget:应该有一个徽章
  • 这会创建一个列表列表,而不是不同名称的单独变量。虽然它肯定更短。
  • 为什么会发生“陷阱”?
  • 我确实掉进了陷阱,你救了我 :) 谢谢!
【解决方案2】:

如果你想创建没有“列表列表”的不同列表,试试这个:

list1, list2, list3, list4 = ([] for i in range(4))

【讨论】:

  • list1, list2, list3, list4 = [], [], [], [] 仍然更短!直到你可以一次打开一个生成器的包装
  • 4个是的,但如果有更多就很方便
【解决方案3】:

查找list comprehensions

listOfLists = [[] for i in range(N)]

现在,listOfLists 中有 N 个空列表

关于列表推导的更多链接:

1 2 3

希望对你有帮助

【讨论】:

    【解决方案4】:

    我看到这里的许多答案会为您提供许多未指定名称的列表(作为较大列表的元素)。这可能并不总是需要的。 可以使用元组创建多个空列表,每个列表具有不同的名称/值:

    a,b,c = ([],[],[])
    

    改变这个结构应该得到你想要的。

    【讨论】:

    • 在 Python 3 中,你也可以使用a, b, c = [], [], []
    【解决方案5】:

    这个怎么样。

    def mklist(n):
        for _ in range(n):
            yield []
    

    用法:

    list(mklist(10))
    [[], [], [], [], [], [], [], [], [], []]
    
    a, b, c = mklist(3) # a=[]; b=[]; c=[]
    

    【讨论】:

      【解决方案6】:

      对不起,我迟到了两年,但也许我还能帮助其他人。

      下面的代码将动态地“创建”自身。对于每次迭代,都会发出以下命令:

      列表编号 = []

      其中 number 是循环中 i 的值。

      x = 3 # amount of lists you want to create
      for i in range(1, x+1):
          command = "" # this line is here to clear out the previous command
          command = "list" + str(i) + " = []"
          exec(command)
      

      这段特定代码的结果是创建了三个变量:list1、list2 和 list3,每个变量都分配了一个空列表。

      您可以将其概括为几乎任何您想要的东西。 请注意,据我所知,由于变量和全局变量的工作方式,您不能将其放入函数中。

      name = "my_var" # This has to be a string, variables like my_var1, my_var2 will be created.
      value = "[]" # This also has to be a string, even when you want to assign integers! When you want to assign a string "3", you'd do this: value = "'3'"
      amount = 5 # This must be an integer. This many variables will be created (my_var1, my_var2 ... my_var5).
      
      for i in range(1, amount+1):
          command_variable = ""
          command_variable = name + str(i) + " = " + value
          exec(command_variable)
      

      希望我能帮上忙!

      【讨论】:

      • exec 几乎总是一个非常糟糕的主意。如果您考虑使用此代码,请改变主意,不要使用。如果必须动态创建变量,至少使用globals()[varname] = val
      【解决方案7】:

      您也可以像这样添加列表列表列表列表。它不会返回任何错误。但我不知道它是做什么用的。

      n = 5 
      >>> lists = [[[]]] for _ in range(n)]
      >>> lists
         [[[[]]], [[[]]], [[[]]], [[[]]], [[[]]]]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-10-15
        • 1970-01-01
        • 2011-02-27
        • 2018-12-31
        • 2019-10-27
        • 2023-01-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多