何时在Python中使用“while”或“for”

时间:2009-05-28 12:44:28

标签: python loops

我在Python中使用while循环或for循环时遇到了问题。看起来人们更喜欢使用for循环(更少的代码行?)。是否有任何具体情况我应该使用其中一种?这是个人偏好的问题吗?到目前为止我读过的代码让我觉得它们之间存在很大差异。

9 个答案:

答案 0 :(得分:59)

是的,while和for之间存在巨大差异。

for 语句遍历集合或可迭代对象或生成器函数。

while 语句只是循环,直到条件为False。

这不是偏好。这是你的数据结构是什么的问题。

通常,我们将要处理的值表示为range(实际列表)或xrange(生成值)。这为我们提供了为 for 语句量身定制的数据结构。

但是,一般来说,我们有一个现成的集合:集合,元组,列表,映射甚至字符串已经是一个可迭代的集合,所以我们只需使用 for 循环。

在少数情况下,我们可能希望为我们完成一些功能编程处理,在这种情况下,我们可以将该转换应用为迭代的一部分。 sortedenumerate函数对可与 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 SciencePython.org

答案 7 :(得分:0)

如果您的数据很脏并且无法使用 for 循环,则您需要清理数据。

答案 8 :(得分:-2)

while循环更适合普通循环 在处理字符串(如列表,字符串等)时,for循环比while循环好得多。