“ range(0,2)”和“ list(range(0,2))”之间有什么区别?

“ range(0,2)”和“ list(range(0,2))”之间有什么区别?,第1张

“ range(0,2)”和“ list(range(0,2))”之间有什么区别?

在Python 3.x中,

range(0,3)
返回一类不可变的可迭代对象,它使您可以对其进行迭代,它不生成列表,并且它们不将范围内的所有元素存储在内存中,而是在运行时生成元素(当您对其进行迭代时)
,而
list(range(0,3))
产生一个列表(通过遍历所有元素并在内部追加到列表中)。

范例-

>>> range(0,3)range(0, 3)>>> list(range(0,3))[0, 1, 2]

理想情况下,如果只想遍历该值的范围,

range(0,3)
则速度会更快,
(list(range(0,3))
因为后者在开始遍历之前有产生列表的开销。

在Python 2.x中,

range(0,3)
产生一个列表,相反,我们还有一个
xrange()
函数,其行为
range()
与Python
3.x类似(xrange在Python 3.x中被重命名为range)。

对于Python 3.5,从文档中-

范围对象实现collections.abc.Sequence ABC,并提供诸如包含测试,元素索引查找,切片和对负索引的支持等功能

因此,您可以执行以下 *** 作-

>>> range(0,10)[5]5>>> range(0,10)[3:7]range(3, 7)>>> 5 in range(6,10)False>>> 7 in range(1,8)True

从测试中可以看出,所有这些都是固定时间的 *** 作-

In [11]: %timeit a = xrange(0,1000000)[1000]1000000 loops, best of 3: 342 ns per loopIn [12]: %timeit a = xrange(0,1000000)[10000]1000000 loops, best of 3: 342 ns per loopIn [13]: %timeit a = xrange(0,1000000)[100000]1000000 loops, best of 3: 342 ns per loopIn [14]: %timeit a = xrange(0,1000000)[999999]1000000 loops, best of 3: 342 ns per loopIn [15]: %timeit a = xrange(0,10000000)[9999999]1000000 loops, best of 3: 339 ns per loopIn [16]: %timeit a = xrange(0,1000000000000)[9999999999]1000000 loops, best of 3: 341 ns per loop


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5620288.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-15
下一篇 2022-12-15

发表评论

登录后才能评论

评论列表(0条)

保存