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

2025-02-27 09:05:00
admin
原创
63
摘要:问题描述:在 Python 中,我什么时候应该使用while循环或for循环?看起来人们更喜欢使用for循环(为了简洁?)。在特定情况下我应该使用其中一个吗?这是个人喜好的问题吗?到目前为止,我读过的代码让我认为它们之间存在很大差异。解决方案 1:是的,while 和 for 之间有很大区别。for语句遍历集...

问题描述:

在 Python 中,我什么时候应该使用while循环或for循环?看起来人们更喜欢使用for循环(为了简洁?)。在特定情况下我应该使用其中一个吗?这是个人喜好的问题吗?到目前为止,我读过的代码让我认为它们之间存在很大差异。


解决方案 1:

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

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

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

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

通常,我们将想要处理的值表示为range(实际列表)或xrange(生成值)(编辑:在 Python 3 中,range现在是一个生成器,其行为与旧xrange函数类似。已从 Python 3 中删除)。这为我们提供了一个为forxrange语句量身定制的数据结构。

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

在某些情况下,我们可能希望函数式编程为我们完成一些处理,在这种情况下,我们可以将转换作为迭代的一部分应用。sortedandenumerate函数对可迭代对象应用转换,这自然适合for语句。

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

解决方案 2:

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

while user_is_sleeping():
    wait()

当然,你可以编写一个适当的迭代器来封装该操作并使其可以通过以下方式访问for- 但这如何提高可读性?¹

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

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

for _ in iter(user_is_sleeping, False):
    wait()

解决方案 3:

for是迭代列表的更符合 Python 风格的选择,因为它更简单且更易于阅读。

例如这个:

for i in range(11):
    print i

比这个更简单,也更容易阅读:

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

解决方案 4:

当您有明确的迭代次数(已知迭代次数)时,使用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。

解决方案 5:

首先,python 中的 for 循环与其他语言中的 for 循环有所不同。在 python 中,for 循环遍历一个值列表(例如:for value in [4,3,2,7]),而在大多数其他语言(C/C++、Java、PHP 等)中,for 循环充当 while 循环,但更易于阅读。

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

解决方案 6:

考虑处理可迭代对象。你可以用循环来完成for

for i in mylist:
   print i

或者,你可以用循环来完成while

it = mylist.__iter__()
while True:
   try:
      print it.next()
   except StopIteration:
      break

这两个代码块基本上以相同的方式完成相同的任务。但是循环for隐藏了迭代器的创建和异常的处理,StopIteration因此您无需亲自处理它们。

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

解决方案 7:

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

解决方案 8:

for循环将遍历一个列表(范围是数字列表)。

while循环将不断迭代,直到满足条件为止。

您可以使用for循环逐字逐句地遍历文件,并使用 break 来产生异常。正如其他人所提到的,您通常希望在使用for循环时遍历列表。

for word in book:
    if word == 'is':
        break

while循环一直运行,直到发生异常为止。正如其他人所提到的,使用while循环时并不期望迭代所有值。

print("Enter any negative value to end.")
while (n=int(input)) => 0:
    grade_total += n
    average = grade_total / n

这将允许使用不同数量的可评分项目对不同的学生进行评分。

解决方案 9:

与所有语言一样,您应该尝试使用最适合该工作的工具。

while condition是一个非常普遍的概念

for item in iterator更具体一点。

只要你能使用后者,它就是首选。从更一般的意义上讲,我们有概念的层次结构

  1. gotoif

  2. switchelif function call(包括递归)

  3. while,,,,untilcontinuebreak

  4. for

  5. map,,filterreduce

您想使用列表的最低部分(即最高索引)来简洁地表达您的想法。

如果您可以将操作实现为map,则无需编写forwhile循环。如果您可以将某事简洁地表达为forwhile循环,则无需使用递归来编写概念。如果您可以使用函数调用和循环来简洁地表达一个想法,则无需调用goto

复杂的想法需要你在列表中往上移(即更原始的想法)。

并非每个人都只是对一堆数据进行映射。他们会对每个元素执行一些复杂的操作,因此他们需要处于级别 (4) 而不是级别 (5)。

有些人正在循环一个非常复杂且没有被迭代器索引的条件。他们需要留在while陆地上。

有些人正在研究一种高度自我参照的事物,它有许多案例,有许多相互交织的部分,他们需要在其中生活functionswitch着陆。

有时(但非常非常少),你需要一些跳跃式的代码,因为 1. 因为某种原因,这是表达你的想法最简单的方式,或 2. 你有一些资源/空间限制迫使你去实现它,3. 你正在进行超出编译器能力范围的优化。

在这种罕见的情况下,你会想住在goto陆地上。

这里我们看到,Pythonfor尽可能地倾向于使用while,因为它尊重使想法更加具体的自然层次结构。

解决方案 10:

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

解决方案 11:

对我来说,如果你的问题需要使用多个指针来跟踪某个边界,我总是更喜欢 While 循环。

在其他情况下,它只是 for 循环。

相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   3807  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   2690  
  敏捷每日站会作为敏捷项目管理中的关键环节,对于提升产品生命周期管理(PLM)效率有着不可忽视的作用。PLM涵盖了产品从概念产生到最终报废的全过程管理,涉及众多环节与人员,而每日站会能够通过优化沟通机制,让信息在团队中快速、准确地流动,从而推动整个PLM流程更加顺畅、高效。接下来,我们将深入探讨如何通过四步优化沟通机制,...
plm系统   130  
  在企业的发展进程中,产品生命周期管理(PLM)项目管理至关重要,而数据驱动决策则是提升PLM项目管理效能的关键手段。通过运用合适的分析模型,企业能够从海量数据中挖掘有价值的信息,为决策提供有力支撑,进而优化产品全生命周期的各个环节。以下将详细介绍助力PLM项目管理实现数据驱动决策的5大分析模型。需求分析模型需求分析是P...
plm系统功能介绍   133  
  PLM(产品生命周期管理)系统在企业的产品研发、生产与运营中扮演着至关重要的角色。它涵盖了从产品概念设计到退役的全流程管理,确保产品数据的有效整合与协同。然而,在复杂多变的商业环境中,黑天鹅事件随时可能降临,给企业带来难以预估的冲击。这些意外事件具有不可预测性、极大的影响力和事后的可解释性等特点,会对PLM系统的正常运...
plm系统的主要功能模块   131  
热门文章
项目管理软件有哪些?
曾咪二维码

扫码咨询,免费领取项目管理大礼包!

云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用