在Python中生成长度为n的空列表序列?

3 投票
3 回答
563 浏览
提问于 2025-04-18 06:18

在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)在这里经常被误用,很多情况下都会出现这个错误。

撰写回答