Python:列出初始化差异

时间:2009-07-20 16:17:34

标签: python list

我想要一个完整相同的列表,其中的东西将是字符串或数字。这两个列表的创建方式有区别吗?有什么隐藏我应该知道的吗?

list_1 = [0] * 10

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

有没有更好的方法来完成同样的任务?

提前致谢。

3 个答案:

答案 0 :(得分:15)

这取决于你的列表元素是否可变,如果是,则会有所不同:

>>> 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], [], [], [], [], [], [], [], [], []]

对于不可变元素,两者的行为是相同的。它们之间可能存在性能差异,但我不确定哪一个会表现得更快。

答案 1 :(得分:3)

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

在第二种形式中,它必须首先评估生成器并收集所有值。最有可能的是逐步增加列表 - 由于调整大小,成本很高。

第一种方法也应该是最好的方法。

答案 2 :(得分:1)

第一个不仅更快,而且更具可读性:只需快速查看,您就可以立即了解该列表中的内容,而在第二种情况下,您必须停止并查看迭代。

由于源代码只写了一次并且读了很多次,对于不可变元素我绝对会投票给第一个选项。