显然 xrange 更快,但我不知道为什么它更快(到目前为止,除了轶事之外还没有证据表明它更快)或除此之外还有什么不同
for i in range(0, 20):
for i in xrange(0, 20):
在 Python 2.x 中:
range
创建一个列表,因此,如果执行range(1, 10000000)
它将在内存中创建一个包含9999999
元素的列表。
xrange
是一个懒惰求值的序列对象。
在 Python 3 中:
range
等效于 Python 2 的xrange
。要获取列表,您必须显式使用list(range(...))
。xrange
不再存在。range 创建一个列表,因此,如果执行
range(1, 10000000)
它将在内存中创建一个包含9999999
元素的列表。
xrange
是一个生成器,因此它是一个序列对象,是一个懒惰求值的对象。
的确如此,但是在 Python 3 中, range()
将由 Python 2 xrange()
。如果需要实际生成列表,则需要执行以下操作:
list(range(1,100))
记住,请使用timeit
模块来测试哪个较小的代码片段更快!
$ python -m timeit 'for i in range(1000000):' ' pass'
10 loops, best of 3: 90.5 msec per loop
$ python -m timeit 'for i in xrange(1000000):' ' pass'
10 loops, best of 3: 51.1 msec per loop
就个人而言,我总是使用range()
,除非我处理的是非常大的列表 - 从时间上可以看出,对于一百万个条目的列表,额外的开销只有 0.04 秒。正如 Corey 所指出的那样,在 Python 3.0 中, xrange()
将会消失,而range()
仍将为您提供良好的迭代器行为。