在Python中生成长度为n的空列表序列?
在Python中,[]*2
的结果是[]
,也就是一个空列表。
那有没有简单的方法可以得到[[],[]]
,也就是一个包含两个空列表的列表呢?
3 个回答
-3
这是因为,比如说,[1]*3
会生成 [1,1,1]
,也就是说,它会创建一个包含列表内容的序列。
所以你想要复制的值是 []
:
a = [[]]*2
这样会得到
[[], []]
由于 *
操作符的工作方式,这样会生成相同列表的副本。因此,如果你尝试修改其中任何一个空列表,它会影响到两个列表。因为它们都是空的,你几乎只能对它们进行追加操作;也就是说,a[0].append(1)
会变成 [[1],[1]]
。这可能是你想要的,但不太可能。
4
使用列表推导式:
[[] for _ in range(2)]
6
你可能想要的是:
[[] for _ in range(n)]
跟 [[]] * n
不一样,这样做会给你独立的内部列表(对一个的修改不会影响到所有)。例如:
>>> x = [[] for _ in range(n)]
>>> x[0].append(1)
>>> x
[[1], [], []]
和下面这个相比:
>>> x = [[]] * 3
>>> x[0].append(1)
>>> x
[[1], [1], [1]]
注意,后面这个写法([[]] * n
)在这里经常被误用,很多情况下都会出现这个错误。