有人告诉我,如果你想多次遍历列表,那么使用范围可能会更好。这是因为xrange必须在每次访问索引时生成一个整数对象,而range是一个静态列表,整数已经是"那里"使用。
因此,我推断由range方法创建的列表保留在内存中足以重新迭代。什么时候该名单会被销毁?
答案 0 :(得分:0)
在Python 2中,range(n)
会返回从0
到n-1
的数字列表。
如果您编码
for i in range(1000000):
然后你的程序会创建一个包含一百万个整数的列表,并在for
语句结束时抛出它。该列表必须在内存中构建,如果您的代码经常执行,那么这可能很昂贵。
如果您编码
for i in xrange(1000000):
那么你的程序不会创建一百万个整数的列表:相反,你得到一种迭代器。但它仍将在for
声明的末尾被销毁。 {1}}函数的日期来自Python 1,在语言将迭代器作为第一类构造之前,但这个想法大致相同。它不是一个数据结构,而是一大块代码,当你提出它时它会返回下一个数字,而不是事先生成它们。
所以你的推论“由xrange()
方法创建的列表保留在内存中足以重新迭代”是不正确的。 (虽然我认为你的意思是range
而不是xrange
。无论哪种方式,都是错的。)
如果您希望生成range
生成的列表在内存中保留,请执行以下操作:
range()
然后你可以做
myrange = range(1000000):
根据您的喜好,您只需支付一次创建一百万个整数列表的开销。
如果您的范围是数十或数百,而不是数百万,并且您需要提出这个问题,那么您不应该担心效率。