cyb*_*org 19 python python-2.7 python-3.x
需要了解的区别range(0,2)和list(range(0,2))使用python2.7
两者都返回一个列表,那究竟是什么区别呢?
Ana*_*mar 37
在Python 3.x中,
range(0,3)返回一类不可变的可迭代对象,它们允许你迭代它们,它不会产生列表,并且它们不会将所有元素存储在内存中的范围内,而是它们会动态生成元素(当你迭代它们时) ,而list(range(0,3))产生一个列表(通过遍历所有元素并在内部附加到列表).
示例 -
>>> range(0,3)
range(0, 3)
>>> list(range(0,3))
[0, 1, 2]
Run Code Online (Sandbox Code Playgroud)
理想情况下,如果您只想迭代该范围的值,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,从文档 -
Range对象实现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
Run Code Online (Sandbox Code Playgroud)
所有这些都是恒定时间操作,从这个测试中可以看出 -
In [11]: %timeit a = xrange(0,1000000)[1000]
1000000 loops, best of 3: 342 ns per loop
In [12]: %timeit a = xrange(0,1000000)[10000]
1000000 loops, best of 3: 342 ns per loop
In [13]: %timeit a = xrange(0,1000000)[100000]
1000000 loops, best of 3: 342 ns per loop
In [14]: %timeit a = xrange(0,1000000)[999999]
1000000 loops, best of 3: 342 ns per loop
In [15]: %timeit a = xrange(0,10000000)[9999999]
1000000 loops, best of 3: 339 ns per loop
In [16]: %timeit a = xrange(0,1000000000000)[9999999999]
1000000 loops, best of 3: 341 ns per loop
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10163 次 |
| 最近记录: |