生成一个数字列表 - 一般来说,哪一个更好?

n=[n for n in range(10)]

print(n)


r=list(range(10))

print(r)


a=range(0,10)

print(list(a))

这些特定的符号有什么优点吗?


沧海一幻觉
浏览 89回答 2
2回答

慕雪6442864

Python有一个用于快速基准测试的模块:timeitPython 3.6.9 (default, Nov  7 2019, 10:44:02) [GCC 8.3.0] on linuxType "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()

忽然笑

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 倍,对于较大的列表,这种差异只会增加。列表的优点最大的区别是列表可以包含任何类型的对象。因此,如果您希望您的数字是浮动的,那么这是更简单的解决方案。此外,它还允许您追加或删除单个条目。因此,如果您需要对数字进行一些自定义排序,那么列表可能会更容易。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python