为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

沧海一幻觉 2022-08-25 15:56:04
n=[n for n in range(10)]print(n)r=list(range(10))print(r)a=range(0,10)print(list(a))这些特定的符号有什么优点吗?
查看完整描述

2 回答

?
慕雪6442864

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()


查看完整回答
反对 回复 2022-08-25
?
忽然笑

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 倍,对于较大的列表,这种差异只会增加。


列表的优点

最大的区别是列表可以包含任何类型的对象。因此,如果您希望您的数字是浮动的,那么这是更简单的解决方案。


此外,它还允许您追加或删除单个条目。因此,如果您需要对数字进行一些自定义排序,那么列表可能会更容易。


查看完整回答
反对 回复 2022-08-25
  • 2 回答
  • 0 关注
  • 88 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信