Python 2.X中range和xrange函数的区别是什么?

848 投票
28 回答
491148 浏览
提问于 2025-04-11 09:23

看起来xrange比range快,但我不知道为什么它更快(目前除了听说的,没有其他证据证明它确实更快),也不知道它和其他的有什么不同。

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

28 个回答

123

记住,要测试小段代码哪个更快,可以使用 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() 也会给你很好的迭代器效果。

239

range会创建一个列表,所以如果你写 range(1, 10000000),它会在内存中生成一个包含 9999999 个元素的列表。

xrange 是一个生成器,它会按需生成序列中的元素。

这在Python 3中是正确的,但在Python 3里,range() 实际上是用Python 2中的 xrange() 实现的。如果你真的需要生成一个列表,你需要这样做:

list(range(1,100))
1035

在 Python 2.x 中:

  • range 会创建一个列表,所以如果你写 range(1, 10000000),它会在内存中生成一个包含 9999999 个元素的列表。

  • xrange 是一个序列对象,它会按需生成元素,也就是说它不会一次性把所有元素都放到内存里。

在 Python 3 中:

  • range 的功能和 Python 2 的 xrange 一样。如果你想要得到一个列表,你需要明确地使用 list(range(...))

  • xrange 已经不再存在了。

撰写回答