2 回答
TA贡献1812条经验 获得超5个赞
Python有一个用于快速基准测试的模块:timeit
Python 3.6.9 (default, Nov 7 2019, 10:44:02)
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import timeit
>>> timeit.timeit("[n for n in range(10)]")
0.4846451000000229
>>> timeit.timeit("list(range(10))")
0.3175106840000126
>>>
显然,使用速度更快。它也不那么冗长,意图更清晰恕我直言(列表推导式通常用于转换/过滤可迭代对象)。list()
TA贡献1806条经验 获得超5个赞
Bruno已经解释了为什么列表理解可能不理想,但我想强调列表和范围之间的一些区别。
请务必注意,a 和 a 具有一些不同的功能和方法。因此,“哪一个更好”的答案取决于您的应用。listrange
系列优势
范围是可迭代的,不必将所有数字都保留在内存中。例如,Python 与 没有问题,但会抛出错误。range(int(1e20))list(range(int(1e20)))
还可以更有效地查询范围。比较以下代码片段:
>>> from timeit import timeit
>>> timeit("100 in numbers",setup='numbers=range(10000)')
0.1061642
>>> timeit("100 in numbers",setup='numbers=list(range(10000))')
1.2257957
对于这种情况,一个范围的查询速度提高了 10 倍,对于较大的列表,这种差异只会增加。
列表的优点
最大的区别是列表可以包含任何类型的对象。因此,如果您希望您的数字是浮动的,那么这是更简单的解决方案。
此外,它还允许您追加或删除单个条目。因此,如果您需要对数字进行一些自定义排序,那么列表可能会更容易。
添加回答
举报