如何在Python中创建多个空列表?

46

我该如何创建多个空列表而不需要手动输入以下内容?

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

有没有一个for循环可以让我生成'n'个空列表?


1
参见:https://dev59.com/s3M_5IYBdhLWcg3wcSx_ - Karl Knechtel
8个回答

142

在这里,使用列表综合最简单:

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

要小心不要陷入这个陷阱:

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

7
哇塞!我们恰好同时发布了这个(惊呆了)。 - inspectorG4dget
16
应该为此设立一个徽章。 - Eric
2
这将创建一个列表的列表,而不是具有不同名称的单独变量。尽管它确实更短。 - alemangui
5
为什么会发生“陷阱”? - redbeam_
4
我确实上了圈套,而你救了我 :) 谢谢! - Antoine
显示剩余5条评论

58

如果您想创建不带"列表的列表"的不同列表,请尝试以下方法:

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

4
“list1、list2、list3、list4 = [], [], [], []” 这行代码仍然很短!TIL 你可以一次性解包一个生成器。 - Eric
10
对于4个人是可以的,但如果有更多人会更加方便。 - alemangui

17

查找列表理解

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

现在,listOfLists里面有N个空列表。

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

1 2 3


7

我看到这里的许多答案都会给你很多没有名称赋值的列表(作为更大列表的元素)。这可能并不总是所需的。

使用元组可以创建多个空列表,每个列表具有不同的名称/值:

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

更改这个结构可以让你得到想要的结果。

2
在Python 3中,你也可以这样写:a, b, c = [], [], [] - juanbretti

4

使用此代码:

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

使用方法:

list(mklist(10))
[[], [], [], [], [], [], [], [], [], []]

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

4
以下代码将动态“创建”自身。 对于每一次迭代,都会执行以下命令:

listnumber = []

其中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)

1
exec 几乎总是一个非常糟糕的想法。如果您考虑使用此代码,请改变您的想法并且不要使用它。至少,如果您必须动态创建变量,则使用 globals()[varname] = val - Eric

3
或者说就像这样简单。
added, modified, removed, inactive = ([],) * 4

这很不错。比“added, mod, rem, inact = [],[],[],[]”多了一点神秘,但肯定更紧凑!!! - Robert Alexander

1
你还可以像这样添加一个列表,直到无限嵌套。它不会返回错误,但我不知道它有什么用。
n = 5 
>>> lists = [[[]]] for _ in range(n)]
>>> lists
   [[[[]]], [[[]]], [[[]]], [[[]]], [[[]]]]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接