for 或 while 循环做 n 次

Posted

技术标签:

【中文标题】for 或 while 循环做 n 次【英文标题】:for or while loop to do something n times 【发布时间】:2013-07-12 22:38:54 【问题描述】:

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

for i in range(n):
    do_sth()

还有一个:

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

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

那么你认为,哪种方式更好?

【问题讨论】:

How to repeat a function n times的可能重复 【参考方案1】:

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

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

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

【讨论】:

我想指出,虽然内存效率较低(没有 xrange),但 for 循环要快得多,没有额外的比较和添加。 很高兴知道这一切!非常感谢。 :)【参考方案2】:

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

from itertools import repeat
for i in repeat(None, 10):
    do_sth()

【讨论】:

另一方面需要导入itertools,有点不方便。 Amber 的答案看起来更好。 打码高尔夫很不方便。不知道为什么人们认为进口是某种问题。除了真正的程序有一堆导入和 itertools 有很多你应该使用的东西。 好吧,我假设当你可以用核心语言做一些和用模块一样好的事情时,那为什么要导入呢? Itertools 对于某些目的非常有用,没错,但我可以想象很多 Python 脚本没有它也能很好地工作。这就是为什么它是一个模块而不是核心 Python 的原因。 :) for i in xrange(n): 也更惯用,老实说,这比import 重要得多。 @F1Rumors,通常不鼓励使用纯粹用于副作用的列表推导。【参考方案3】:

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

值得注意的是,在 Python 中,forwhile 语句可以有 breakcontinueelse statements 其中:

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

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

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

【讨论】:

for 循环总是重复n 次绝对不是真的。在for 循环中包含break 语句以使它们重复少于n 次是很常见的。 @AndrésMejía - 我最初的回答确实说“除非意外” - 我的编辑应该澄清有关中断、继续等的详细信息。

以上是关于for 或 while 循环做 n 次的主要内容,如果未能解决你的问题,请参考以下文章

如何计算嵌套在 for 循环中的 while 循环的时间复杂度?

第三次实验报告

R中的for循环与while循环

第三次实验报告

第三次实验报告

关于死循环while(true){}或for(;;){}的总结