在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
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)