Python: 列表初始化的差异
我想要一个列表,里面全是相同的东西,这个东西可以是字符串或者数字。请问这两种列表的创建方式有什么不同吗?有没有什么我应该知道的隐藏信息?
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], [], [], [], [], [], [], [], [], []]
如果元素是不可改变的,那么这两种方式的表现是一样的。它们之间可能会有性能上的差异,但我不确定哪一种会更快。