在Python2.X中,range和xrange函数有什么区别?

2024-03-28 19:29:37 发布

您现在位置:Python中文网/ 问答频道 /正文

显然xrange更快了,但我不知道为什么它更快了(除了目前为止的传闻之外,没有证据表明它更快了),或者除了这之外还有什么不同之处

for i in range(0, 20):
for i in xrange(0, 20):

Tags: in证据forrangexrange
3条回答

在Python 2.x中:

  • range创建一个列表,因此如果这样做,它将在内存中创建一个包含9999999元素的列表。

  • xrange是一个延迟计算的序列对象。

在Python 3中,range与Python的xrange等价,要获得列表,必须使用list(range(...))

range creates a list, so if you do range(1, 10000000) it creates a list in memory with 9999999 elements.

xrangeis a generator, so it is a sequence object is a that evaluates lazily.

这是真的,但是在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()无论如何都将为您提供良好的迭代器行为。

相关问题 更多 >