我在Python中使用while
循环或for
循环时遇到了问题。看起来人们更喜欢使用for
循环(更少的代码行?)。是否有任何具体情况我应该使用其中一种?这是个人偏好的问题吗?到目前为止我读过的代码让我觉得它们之间存在很大差异。
答案 0 :(得分:59)
是的,while和for之间存在巨大差异。
for 语句遍历集合或可迭代对象或生成器函数。
while 语句只是循环,直到条件为False。
这不是偏好。这是你的数据结构是什么的问题。
通常,我们将要处理的值表示为range
(实际列表)或xrange
(生成值)。这为我们提供了为 for 语句量身定制的数据结构。
但是,一般来说,我们有一个现成的集合:集合,元组,列表,映射甚至字符串已经是一个可迭代的集合,所以我们只需使用 for 循环。
在少数情况下,我们可能希望为我们完成一些功能编程处理,在这种情况下,我们可以将该转换应用为迭代的一部分。 sorted
和enumerate
函数对可与 for 语句自然匹配的iterable应用转换。
如果您没有整齐的数据结构进行迭代,或者您没有驱动处理的生成器功能,则必须使用而。
答案 1 :(得分:20)
while
在中断条件在逻辑上不依赖于任何类型的序列的情况下非常有用。例如,考虑不可预测的交互:
while user_is_sleeping():
wait()
当然,你可以编写一个合适的迭代器来封装该动作并使其可以通过for
访问 - 但是如何提供可读性呢?¹
在Python的所有其他情况下,使用for
(或封装循环的适当的高阶函数)。
¹假设user_is_sleeping
函数在false时返回False
,示例代码可以重写为以下for
循环:
for _ in iter(user_is_sleeping, False):
wait()
答案 2 :(得分:13)
for
是迭代列表的更加pythonic的选择,因为它更简单,更容易阅读。
例如:
for i in range(11):
print i
比这简单易读:
i = 0
while i <= 10:
print i
i = i + 1
答案 3 :(得分:4)
首先,python和其他语言中的for循环之间存在差异。 在python中,它迭代一个值列表(例如:[4,3,2,7]中的值),在大多数其他语言(C / C ++,Java,PHP等)中,它充当while循环,但更容易阅读。
For循环通常在已知迭代次数(例如数组的长度)时使用,而while循环在您不知道需要多长时间时使用(例如bubble sort只要值没有排序就循环的算法)
答案 4 :(得分:3)
考虑处理迭代。您可以使用for
循环执行此操作:
for i in mylist:
print i
或者,您可以使用while
循环执行此操作:
it = mylist.__iter__()
while True:
try:
print it.next()
except StopIteration:
break
这两个代码块从根本上以相同的方式从根本上做同样的事情。但是for
循环隐藏了迭代器的创建和StopIteration
异常的处理,因此您不需要自己处理它们。
我唯一能想到你使用while
循环来处理一个iterable的时候,如果你因某些原因需要直接访问迭代器,例如在某些情况下,您需要跳过列表中的项目。
答案 5 :(得分:2)
For循环通常会使迭代的内容更清晰。您不能总是直接使用它们,但是大多数情况下,带有while循环的迭代逻辑可以包含在生成器函数中。例如:
def path_to_root(node):
while node is not None:
yield node
node = node.parent
for parent in path_to_root(node):
...
而不是
parent = node
while parent is not None:
...
parent = parent.parent
答案 6 :(得分:2)
用于循环 确定的错误(已知迭代次数)时。
使用示例:
for i in range(23):
。for book in books:
。while 循环是不确定信号,在循环重复时使用 未知次数,并在满足某些条件时结束。
请注意,在while循环的情况下,循环的缩进主体应在测试条件下修改至少一个变量,否则结果为无限循环。
使用示例:
代码块的执行要求用户输入指定的输入:while input == specified_input:
。
当您具有比较运算符的条件时:while count < limit and stop != False:
。
引用:For Loops Vs. While Loops, Udacity Data Science,Python.org。
答案 7 :(得分:0)
如果您的数据很脏并且无法使用 for 循环,则您需要清理数据。
答案 8 :(得分:-2)
while循环更适合普通循环 在处理字符串(如列表,字符串等)时,for循环比while循环好得多。