如何创建一个空列表的列表

67

如果这个问题之前已经得到解答,那我很抱歉,但我在这里没有找到类似的问题。

我对Python还比较新,我想要创建的内容如下:

list1 = []
list2 = []
results = [list1, list2]

这段代码完全正常,但我想知道是否有更快的方法可以在一行内完成。

我尝试了以下内容,但没有成功,但我希望它能够演示我想要的东西:

result = [list1[], list2[]]

就复杂性而言,将其放在一行上是否会有任何区别?或者在任何情况下都需要进行三个赋值操作吗?


2
结果 = [列表1, 列表2] = [[], []] - wim
5个回答

175
对于任意长度的列表,您可以使用[[] for _ in range(N)]
不要使用[[]] * N,因为这会导致列表包含N个相同的列表对象。

23
这个答案比被采纳的答案更有帮助,因为它解释了为什么我们不应该使用 [[]]*N - Astariul
3
[[] for _ in range(N)] 符合更好的编码风格,因为索引变量被忽略了。 - Hari
10
我希望早些知道这个。我犯了完全相同的错误,被一个bug咬了一下,不得不调试了几个小时。叹气 :( - jdhao
是的,我可以确认,当您尝试向其中一个列表追加数值时,您会得到非常令人惊讶的结果... - undefined

62

手动创建特定数量的列表,可以采用以下方法:

empty_list = [ [], [], ..... ]

如果您想生成更多的列表,则将其放入循环中会更好:

empty_lists = [ [] for _ in range(n) ]

3
如果你只想要一行代码,可以这样写:
result = [[],[]]

1
同样的result = [list(), list()],但是一个小提示,[[], []]更加清晰。 - Remi Guan
非常感谢大家。此外,如果我有一个如下的列表:`list = [[firstName, 1,],[secondName,2],[thirdName,3]]`我该如何访问实际数字?例如,如果我想找出以下数字中的最高数字:`list[0][1] list[1][1] list[2][1]`那么命令是什么?可能与max()有关吗? - daemon_headmaster
@daemon_headmaster,这应该作为一个完整的问题发布,但你可以这样做:max([i[1] for i in list]) - dietbacon

1
我建议使用numpy,因为你可以构建更高维的列表:
import numpy as np
LIST = np.zeros( [2,3] )# OR np.zeros( [2,3,6] )

它可以在任意维度中运行。


这不是问题所要求的。这将创建一个由零组成的列表列表,而不是空列表的列表。 - Daniel Hauck
那会构建一个NumPy数组,而不是列表。 - PM 2Ring

0
results = [[],[]]

或者

results = [list(), list()]

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