Python: 列表初始化的差异

3 投票
3 回答
7697 浏览
提问于 2025-04-15 13:01

我想要一个列表,里面全是相同的东西,这个东西可以是字符串或者数字。请问这两种列表的创建方式有什么不同吗?有没有什么我应该知道的隐藏信息?

list_1 = [0] * 10

list_2 = [0 for i in range(10)]

有没有更好的方法来完成这个任务呢?

提前谢谢你。

3 个回答

1

第一个方法不仅更快,而且更容易理解:你只需快速看一眼,就能立刻明白那个列表里有什么,而第二种方法则需要停下来查看循环的内容。

因为源代码只写一次,但会被读很多次,所以对于不变的元素,我绝对支持第一个选项。

3

我个人建议使用第一种方法,因为它可能是性能最好的。系统事先就知道列表的大小和内容。

而第二种方法则需要先计算生成器,收集所有的值。通常是逐步构建列表,这样做会比较耗费资源,因为需要不断调整大小。

所以第一种方法应该是最好的选择。

16

这要看你的列表里的元素是否可以改变。如果可以改变,那就会有区别:

>>> l = [[]] * 10
>>> l
[[], [], [], [], [], [], [], [], [], []]
>>> l[0].append(1)
>>> l
[[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]]
>>> l = [[] for i in range(10)]
>>> l[0].append(1)
>>> l
[[1], [], [], [], [], [], [], [], [], []]

如果元素是不可改变的,那么这两种方式的表现是一样的。它们之间可能会有性能上的差异,但我不确定哪一种会更快。

撰写回答