何时在Python中使用"while"或"for"

Fab*_*bio 32 python loops

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

S.L*_*ott 62

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

语句遍历集合或迭代的对象或发电机的功能.

同时,语句简单循环,直到条件为假.

这不是偏好.这是您的数据结构是什么的问题.

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

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

在少数情况下,我们可能希望为我们完成一些函数式编程处理,在这种情况下,我们可以将该转换应用为迭代的一部分.在sortedenumerate介绍了与自然的匹配可迭代函数应用转换声明.

如果您没有整齐的数据结构来迭代,或者您没有驱动处理的生成器函数,则必须使用while.

  • @fabio:"更多的是可读性问题".不,这是匹配算法和数据结构的问题.没有想法或任何"优先".这很简单.**除非不可能,否则使用.**如果由于某种原因不可能,那么****. (4认同)
  • 说出来是一回事,表现出来又是另一回事。您应该展示一个示例,其中“for”不起作用,但“while”起作用。我可以说它们是完全一样的,那么谁又怎么知道我们谁是正确的呢?例子有助于更好地解释事情。 (3认同)

Kon*_*lph 21

while在中断条件在逻辑上不依赖于任何类型的序列的情况下非常有用.例如,考虑不可预测的交互:

 while user_is_sleeping():
     wait()
Run Code Online (Sandbox Code Playgroud)

当然,您可以编写一个适当的迭代器来封装该操作并使其可以通过for- 但是如何提供可读性?¹

在Python的所有其他情况下,使用for(或封装循环的适当的高阶函数).

¹假设user_is_sleeping函数False在false时返回,示例代码可以重写为以下for循环:

for _ in iter(user_is_sleeping, False):
    wait()
Run Code Online (Sandbox Code Playgroud)

  • 如果它不是问题而只是好奇心问题,你说我可以编写一个for语句来替换while循环,那会是什么样子?谢谢 (2认同)

And*_*are 13

for是迭代一个列表,因为它更简单,更易于阅读更Python的选择.

例如:

for i in range(11):
    print i
Run Code Online (Sandbox Code Playgroud)

比这简单易读:

i = 0
while i <= 10:
    print i
    i = i + 1
Run Code Online (Sandbox Code Playgroud)

  • @fabio ......不太好.有些循环只能合理地使用while编写,但在大多数情况下,你应该尝试使用而不是while. (4认同)

DIN*_*LIT 9

当有明确的迭代次数(迭代次数已知)时,使用for循环。

使用示例:

  • 迭代具有确定范围的循环:for i in range(23):
  • 迭代集合(字符串、列表、集合、元组、字典):for book in books:.

while循环是一种不定迭代,当循环重复未知次数并在满足某些条件时结束时使用。

请注意,在 while 循环的情况下,循环的缩进主体应至少修改测试条件中的一个变量,否则结果将是无限循环。

使用示例:

  • 代码块的执行要求用户输入指定的输入:while input == specified_input:

  • 当您有带有比较运算符的条件时:while count < limit and stop != False:.

参考文献:For 循环与循环。While 循环,Udacity 数据科学Python.org


Adr*_*ter 5

首先,python 和其他语言中的 for 循环之间存在差异。虽然在 python 中它迭代一个值列表(例如:[4,3,2,7] 中的值),但在大多数其他语言(C/C++、Java、PHP 等)中它充当一个 while 循环,但更容易阅读。

For 循环通常在迭代次数已知时使用(例如数组的长度),而 while 循环则在您不知道需要多长时间时使用(例如,冒泡排序算法会循环多久)值未排序)