Python范围用于多次迭代

时间:2017-12-24 18:55:13

标签: python

有人告诉我,如果你想多次遍历列表,那么使用范围可能会更好。这是因为xrange必须在每次访问索引时生成一个整数对象,而range是一个静态列表,整数已经是"那里"使用。

因此,我推断由range方法创建的列表保留在内存中足以重新迭代。什么时候该名单会被销毁?

1 个答案:

答案 0 :(得分:0)

在Python 2中,range(n)会返回从0n-1的数字列表。

如果您编码

for i in range(1000000):

然后你的程序会创建一个包含一百万个整数的列表,并在for语句结束时抛出它。该列表必须在内存中构建,如果您的代码经常执行,那么这可能很昂贵。

如果您编码

for i in xrange(1000000):

那么你的程序不会创建一百万个整数的列表:相反,你得到一种迭代器。但它仍将在for声明的末尾被销毁。 {1}}函数的日期来自Python 1,在语言将迭代器作为第一类构造之前,但这个想法大致相同。它不是一个数据结构,而是一大块代码,当你提出它时它会返回下一个数字,而不是事先生成它们。

所以你的推论“由xrange()方法创建的列表保留在内存中足以重新迭代”是不正确的。 (虽然我认为你的意思是range而不是xrange。无论哪种方式,都是错的。)

如果您希望生成range生成的列表在内存中保留,请执行以下操作:

range()

然后你可以做

 myrange = range(1000000):

根据您的喜好,您只需支付一次创建一百万个整数列表的开销。

如果您的范围是数十或数百,而不是数百万,并且您需要提出这个问题,那么您不应该担心效率。