54

在 Python 中,您有两种很好的方法可以多次重复某些操作。其中一个是while循环,另一个是for循环。因此,让我们看一下两个简单的代码:

for i in range(n):
    do_sth()

和另一个:

i = 0
while i < n:
    do_sth()
    i += 1

我的问题是哪一个更好。当然,第一个在文档示例和您可以在 Internet 上找到的各种代码中很常见,它更优雅、更短,但另一方面,它创建了一个完全无用的整数列表,只是为了循环他们。这不是浪费内存,尤其是就大量迭代而言?

那么您认为哪种方式更好?

4

3 回答 3

65

但另一方面,它创建了一个完全无用的整数列表,只是为了循环它们。这不是浪费内存,尤其是就大量迭代而言?

这就是xrange(n)目的。它避免创建一个数字列表,而是只提供一个迭代器对象。

在 Python 3 中,xrange()被重命名为range()- 如果你想要一个列表,你必须通过list(range(n)).

于 2013-07-15T06:24:09.700 回答
20

这比(和 while 循环)更轻xrange,因为它甚至不需要创建int对象。它在 Python2 和 Python3 中也同样适用

from itertools import repeat
for i in repeat(None, 10):
    do_sth()
于 2013-07-15T06:38:15.730 回答
2

大多数编程语言的根本区别在于,除非意外发生,否则for循环将始终重复n多次,或者直到遇到 break 语句(可能是有条件的),然后以while循环结束,它可能会重复0 times, 1, more or even forever,这取决于必须的给定条件在每个循环开始时为真以使其执行,并且在退出循环时始终为假,(为了完整性,do ... while循环,(或repeat until),对于拥有它的语言,总是至少执行一次并且不保证第一次的条件执行)。

值得注意的是,在 Python 中,一个fororwhile语句可以有break,continueelse 语句,其中:

  • break- 终止循环
  • continue- 在循环中继续下一次,这次不执行以下代码
  • else- 如果循环完成而没有执行任何break语句,则执行。

注意现在不受支持的Python 2range中生成了一个整数列表,但您可以使用xrange迭代器。在 Python 3range中返回一个迭代器。

所以你的问题的答案是'这一切都取决于你想要做什么'!

于 2013-07-15T07:05:08.493 回答