Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
何时使用;而";或;至于;用Python_Python_Loops - Fatal编程技术网

何时使用;而";或;至于;用Python

何时使用;而";或;至于;用Python,python,loops,Python,Loops,我发现在Python中何时应该使用while循环或for循环存在问题。看起来人们更喜欢使用for循环(代码行更少?)。是否有任何具体情况我应该使用其中一种?这是个人喜好的问题吗?到目前为止,我读过的代码让我觉得它们之间有很大的区别。for的对于迭代列表来说是一个更具python风格的选择,因为它更简单、更容易阅读 例如: for i in range(11): print i 比以下内容更简单、更容易阅读: i = 0 while i <= 10: print i

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

for的
对于迭代列表来说是一个更具python风格的选择,因为它更简单、更容易阅读

例如:

for i in range(11):
    print i
比以下内容更简单、更容易阅读:

i = 0
while i <= 10:
    print i
    i = i + 1
i=0

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

 while user_is_sleeping():
     wait()
当然,您可以编写一个适当的迭代器来封装该操作,并通过
for
使其可访问,但这将如何提高可读性呢

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

假设
用户\u正在睡眠
函数返回
False
当为False时,示例代码可以重写为以下
for
循环:

for _ in iter(user_is_sleeping, False):
    wait()
for i in mylist:
   print i
it = mylist.__iter__()
while True:
   try:
      print it.next()
   except StopIteration:
      break

是的,while和for之间有很大的区别

for语句遍历集合、可编辑对象或生成器函数

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

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

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

但是,一般来说,我们有一个现成的集合:集合、元组、列表、映射甚至字符串已经是一个iterable集合,因此我们只需使用for循环

在一些情况下,我们可能希望为自己完成一些函数式编程处理,在这种情况下,我们可以将转换作为迭代的一部分来应用。
sorted
enumerate
函数对一个iterable应用一个转换,该转换自然地符合for语句


如果没有整洁的数据结构进行迭代,或者没有驱动处理的生成器函数,则必须使用,而

For循环通常可以更清楚地说明迭代在做什么。您不能总是直接使用它们,但大多数情况下,while循环的迭代逻辑可以包装在生成器func中。例如:

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

首先,python中的for循环与其他语言中的for循环存在差异。 在python中,它迭代一系列值(例如[4,3,2,7]中的值),而在大多数其他语言(C/C++、Java、PHP等)中,它充当While循环,但更易于阅读


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

考虑处理iterables。您可以使用
for
循环执行此操作:

for _ in iter(user_is_sleeping, False):
    wait()
for i in mylist:
   print i
it = mylist.__iter__()
while True:
   try:
      print it.next()
   except StopIteration:
      break
或者,您可以使用
while
循环来执行此操作:

for _ in iter(user_is_sleeping, False):
    wait()
for i in mylist:
   print i
it = mylist.__iter__()
while True:
   try:
      print it.next()
   except StopIteration:
      break
这两个代码块以基本相同的方式做基本相同的事情。但是
for
循环隐藏了迭代器的创建和
StopIteration
异常的处理,因此您不需要自己处理它们

我能想到的唯一一次使用
while
循环来处理iterable的情况是,如果出于某种原因需要直接访问迭代器,例如,在某些情况下需要跳过列表中的项

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

使用示例:

  • 以确定的范围迭代循环:
    对于范围(23)中的i:
  • 遍历集合(字符串、列表、集合、元组、字典):
    对于图书中的图书:
while循环是循环重复时使用的一种不定循环 未知次数,并在满足某个条件时结束

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

使用示例:

  • 代码块的执行要求用户输入指定的输入:
    ,而输入==指定的输入:

  • 当您有使用比较运算符的条件时:
    while count


参考资料:,.

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

如果您的数据不干净,并且无法处理for循环,则需要清理数据。

因此我们可以说,在python中,“while”更不受欢迎?@fabio。。。不完全是。有一些循环只能合理地使用while编写,但在大多数情况下,您应该尝试优先使用for而不是while。更重要的是可读性问题,您可以同时使用这两个迭代,但最好使用While来表示更模糊的数据结构。@fabio:“更重要的是可读性问题”。不,这是一个匹配算法和数据结构的问题。没有任何想法或任何“更可取的”。很简单。除非不可能,否则使用。如果出于某种原因,for是不可能的,那么while。说出来是一回事,表现出来是另一回事。您应该展示一个示例,其中“f