Python:列出初始化差异

2024-05-19 01:14:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我想要一个包含相同内容的列表,内容要么是字符串,要么是数字。这两个列表的创建方式有什么不同吗?有什么我应该知道的秘密吗?

list_1 = [0] * 10

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

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

提前谢谢。


Tags: 方法字符串in内容列表for方式range
3条回答

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

在第二种形式中,它必须首先计算生成器并收集所有值。最有可能的方法是逐步建立列表——这是因为调整大小而付出的代价。

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

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

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

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

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

由于源代码是一次编写,多次读取,对于不可变的元素,我肯定会投票给第一个选项。

相关问题 更多 >

    热门问题