显然xrange更快,但我不知道为什么它更快(除了目前为止的传闻之外,没有证据表明它更快),或者除此之外还有什么不同
for i in range(0, 20):
for i in xrange(0, 20):
显然xrange更快,但我不知道为什么它更快(除了目前为止的传闻之外,没有证据表明它更快),或者除此之外还有什么不同
for i in range(0, 20):
for i in xrange(0, 20):
当前回答
在Python 2.x中:
range会创建一个列表,所以如果您选择range(10000000),它会在内存中创建一个包含9999999个元素的列表。xrange是一个延迟求值的序列对象。
在Python 3中:
range相当于Python 2的xrange。要获得列表,必须显式使用list(range(…))。xrange不再存在。
其他回答
xrange使用迭代器(动态生成值),range返回一个列表。
请参阅本文,了解range和xrange之间的差异:
引用:
range返回您所认为的结果:连续列表整数,具有以0开头的定义长度。xrange,返回一个“xrange对象”,它的行为非常像迭代器
range:-range将一次填充所有内容。这意味着范围中的每个数字都将占用内存。
xrange:xrange有点像生成器,当你想要数字的范围,但你不希望它们被存储时,它就会出现在图片中,就像你想使用for loop时一样。
记住,使用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()无论如何都会给您带来不错的迭代器行为。
xrange返回一个迭代器,每次只在内存中保留一个数字。范围将整个数字列表保存在内存中。