显然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不再存在。

其他回答

根据扫描/打印0-N项的要求,range和xrange的工作原理如下。

range()-在内存中创建一个新列表,并获取整个0到N个项目(总共N+1个)并打印它们。xrange()-创建一个迭代器实例,该实例扫描项目并只将当前遇到的项目保存在内存中,因此始终使用相同的内存量。

如果所需的元素只是在列表的开头,那么它可以节省大量的时间和内存。

什么range在运行时返回静态列表。xrange返回一个对象(其作用类似于生成器,尽管它肯定不是一个),在需要时从中生成值。

什么时候使用哪个?

如果你想为一个巨大的范围生成一个列表,比如10亿,特别是当你有一个“记忆敏感系统”,比如手机时,可以使用xrange。如果要在列表中重复多次,请使用范围。

PS:Python 3.x的range函数==Python 2.x的xrange函数。

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

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

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

range会创建一个列表,所以如果您选择range(10000000),它会在内存中创建一个包含9999999个元素的列表。xrange是一个生成器,因此它是一个序列对象。

这是正确的,但在Python3中,range()将由Python2xrange()实现。如果您需要实际生成列表,则需要执行以下操作:

list(range(1,100))

在Python 2.x中:

range会创建一个列表,所以如果您选择range(10000000),它会在内存中创建一个包含9999999个元素的列表。xrange是一个延迟求值的序列对象。

在Python 3中:

range相当于Python 2的xrange。要获得列表,必须显式使用list(range(…))。xrange不再存在。