2024-05-19 01:14:17 发布
网友
我想要一个包含相同内容的列表,内容要么是字符串,要么是数字。这两个列表的创建方式有什么不同吗?有什么我应该知道的秘密吗?
list_1 = [0] * 10 list_2 = [0 for i in range(10)]
有没有更好的方法来完成同样的任务?
提前谢谢。
我个人建议使用第一种方法,因为它很可能是性能最好的方法,因为系统预先知道列表的大小和内容。
在第二种形式中,它必须首先计算生成器并收集所有值。最有可能的方法是逐步建立列表——这是因为调整大小而付出的代价。
第一种方法也应该是最好的方法。
这取决于您的列表元素是否是可变的,如果是可变的,则会有不同:
>>> 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], [], [], [], [], [], [], [], [], []]
对于不可变元素,两者的行为是相同的。它们之间可能有性能差异,但我不确定哪一个性能会更快。
第一个不仅速度更快,而且可读性更强:只需快速查看,您就可以立即了解列表中的内容,而在第二个例子中,您必须停止并查看迭代。
由于源代码是一次编写,多次读取,对于不可变的元素,我肯定会投票给第一个选项。
我个人建议使用第一种方法,因为它很可能是性能最好的方法,因为系统预先知道列表的大小和内容。
在第二种形式中,它必须首先计算生成器并收集所有值。最有可能的方法是逐步建立列表——这是因为调整大小而付出的代价。
第一种方法也应该是最好的方法。
这取决于您的列表元素是否是可变的,如果是可变的,则会有不同:
对于不可变元素,两者的行为是相同的。它们之间可能有性能差异,但我不确定哪一个性能会更快。
第一个不仅速度更快,而且可读性更强:只需快速查看,您就可以立即了解列表中的内容,而在第二个例子中,您必须停止并查看迭代。
由于源代码是一次编写,多次读取,对于不可变的元素,我肯定会投票给第一个选项。
相关问题 更多 >
编程相关推荐