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 中,for
或 while
语句可以有 break
、continue
和 else
statements 其中:
break
- 终止循环
continue
- 进入下一次循环,这次不执行以下代码
else
- 如果循环完成而没有执行任何 break
语句,则执行。
注意现在不支持 Python 2 range
生成了一个整数列表,但您可以使用xrange
来使用迭代器。在 Python 3 中,range
返回一个迭代器。
所以你的问题的答案是'这完全取决于你想要做什么'!
【讨论】:
for
循环总是重复n
次绝对不是真的。在for
循环中包含break
语句以使它们重复少于n
次是很常见的。
@AndrésMejía - 我最初的回答确实说“除非意外” - 我的编辑应该澄清有关中断、继续等的详细信息。以上是关于for 或 while 循环做 n 次的主要内容,如果未能解决你的问题,请参考以下文章