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

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

当前回答

此外,if do list(xrange(…))将等同于range(…)。

所以列表很慢。

而且xrange确实没有完全完成序列

这就是为什么它不是一个列表,而是一个xrange对象

其他回答

xrange返回一个迭代器,每次只在内存中保留一个数字。范围将整个数字列表保存在内存中。

python中的xrange()和range()的工作方式与用户类似,但当我们讨论如何使用这两个函数分配内存时,就会出现不同。

当我们使用range()时,我们为它正在生成的所有变量分配内存,因此不建议与要生成的大量变量一起使用。

另一方面,xrange()一次只能生成一个特定的值,并且只能与for循环一起使用,以打印所需的所有值。

请参阅本文,了解range和xrange之间的差异:

引用:

range返回您所认为的结果:连续列表整数,具有以0开头的定义长度。xrange,返回一个“xrange对象”,它的行为非常像迭代器

Range返回一个列表,而xrange返回一个xrange对象,该对象占用相同的内存,而不考虑范围大小,因为在这种情况下,每次迭代只生成一个元素并可用,而在使用Range的情况下,所有元素都会一次生成并在内存中可用。

此外,if do list(xrange(…))将等同于range(…)。

所以列表很慢。

而且xrange确实没有完全完成序列

这就是为什么它不是一个列表,而是一个xrange对象