如何在Python中结束循环


如何在Python中结束循环

知道如何正确地从一个循环中退出是一项重要的技能。继续阅读,了解你需要的控制循环的工具。

在这篇文章中,我们将向你展示一些在 Python 中终止循环的不同方法。这起初可能看起来有点微不足道,但有一些关于控制语句的重要概念需要理解。我们还将介绍一些鲜为人知的在Python中结束循环的方法,以便为你提供更多控制程序执行方式的工具。

如果你是Python的初学者,我们建议从这篇文章开始,学习我们使用的一些术语。

使用for循环进行迭代

这里的切入点是使用for循环来执行迭代。for 循环是 Python 中最重要的基本概念之一。你会在很多情况下遇到它们,了解它们如何工作是重要的第一步。

对于刚接触 Python 的人来说,关于 for 循环的这篇文章是一个很好的开始。基本上,for 循环是一种对数据集合进行迭代的方法。这些数据可以是数字,例如浮点数或整数,甚至是文本数据,并且可以存储在不同的结构中,包括列表、图元、集合和字典。关于这些数据结构的更深入的材料,请看本课程。

It Ain't Over Till It's Over

这个语言学上的同义词是许多竞争中的劣势者的口头禅。它也是我们讨论如何在 Python 中结束一个循环的第一站。我们可以用上面提到的任何一种数据结构定义一个迭代器来进行循环。另外,我们也可以使用内置的 range() ,它返回一个不可变的序列。

range() 接受 3 个整数参数:start(可选,默认为 0)、stop(需要)和 step(可选,默认为 1)。它返回一个具有预定义元素数量的序列。

我们可以在一个序列中的元素上循环,如下所示:

>>> for i in range(-2, 11, 3):

>> print(i)-214710

这个例子有几个有趣的地方。首先,参数可以是负数。你甚至可以指定一个负数的步骤来进行倒数。自己试一下吧。第二,达到准确的停止值并不是必须的。在上面的例子中,我们从-2开始,走3步,然后我们在10处停止。这是在定义的止损值11之前,但再走3步就会超过止损值。这是在 Python 中结束循环的最明显的方式--在预先定义的迭代次数之后。

如果你想对一些数据进行迭代,有一个替代 for 循环的方法,即使用内置函数 iter() 和 next() 。前者从一个可迭代的数据中定义了一个迭代器,而后者则返回迭代器的下一个元素。一旦我们返回迭代器的最后一个元素,循环或迭代就结束了。在这之后调用 next() 会引发 StopIteration 异常。你可以用这些函数只迭代一次,因为迭代器并没有存储在内存中,但在处理大量数据时,这种方法更有效率。如果你想看一些如何应用这两个函数进行高效循环的具体例子,请查看这篇文章。

循环控制语句break

break 语句是 Python 中三个循环控制语句中的第一个。它与条件语句 (if-elif-else) 一起使用,以便在满足某些条件时提前终止循环。具体来说,break 语句提供了一种在迭代结束前完全退出循环的方法。下面的例子演示了这种行为:

>>> for i in range(5):

>> if i == 3:

>> break

>> print(i)

>> print('Finished')012Finished

我们通过只指定所需的stop参数来使用range() 。在这种情况下,开始参数和步骤参数分别取其默认值0和1。简单地在range(5)中循环会打印出0-4的值。相反,我们检查元素是否等于3,如果是,break语句会完全停止循环。最后一行,print('Finished')是在循环之外,因此在循环被打破后仍然被执行。

continue

与continue语句对比,如下所示:

>>> for i in range(5):

>> if i==3:

>> continue

>> print(i)

>> print('Finished')0124Finished

一旦第二行的条件评估为True,continue语句跳过循环中的print语句。然后它在下一个元素处继续循环。循环在到达最后一个元素时结束。如果你想让你的循环完成,但又想跳过一些元素,这就很方便了。正如上面所看到的,任何在循环下面和外面的代码仍然被执行。

pass

第三个循环控制语句是pass。严格地说,这不是一种在 Python 中退出循环的方法。然而,它值得一提,因为它经常出现在与其他控制语句类似的情况下。试试上面的例子,用 pass 语句代替 continue,你会发现所有由 range() 定义的元素都被打印到屏幕上。pass 语句是一个占位符,你可能希望以后在它的位置上添加代码。

在 Python 中进入紧急退出

到目前为止,我们所看到的功能演示了如何在 Python 中退出一个循环。如果你想在到达终点之前完全退出程序,sys 模块用 exit() 函数提供了这个功能。调用这个函数会引发一个 SystemExit 异常并终止整个程序。

sys.exit() 接受一个可选的参数。它可以是一个整数或一个字符串,可以用来向屏幕打印错误信息。

让我们看看一个例子:

>>> import sys

>> for i in range(5):

>> if i == 3:

>> sys.exit('错误信息')

>> print(i)

>> print('完成')

012 systemExit: 错误信息

在这种情况下,sys.exit()的行为类似于前面例子中的break,但也引发了一个异常。因此,在这个例子中,for循环外的最后一条打印语句没有被执行。

在列表上循环

在循环中执行的一个常见操作是修改一个数据结构,如列表。如果你想在循环过程中从列表中删除一个元素,你可能会发现自己正在使用del关键字,特别是如果你有C++或Java等其他编程语言的背景。

这可能是一个方便的工具,因为它可以从数据结构中删除元素以及删除局部或全局变量。

请看下面的例子,我们想从一个数字列表中删除所有的奇数:

>>> numbers = [1, 1, 2, 3, 4, 5, 6]

>> for i in range(len(numbers)):

... if numbers[i] % 2 != 0: ... del numbers[i]

执行此代码将产生 IndexError: list index out of range。我们已经定义了我们的循环执行了7次(列表的长度)。由于我们用range()定义了这个,所以它是不可改变的。在循环过程中,我们开始从列表中移除元素,这改变了它的长度。现在它的元素数比我们要迭代的序列要少。此外,如果你花点时间考虑一下这个例子,你会发现第二个 1 不会被删除,因为它滑落到了 0 的位置,而循环则进入了索引为 1 的位置。

为了补救这一切,我们可以使用一个巧妙的技巧,使用内置函数reversed(),以相反的顺序遍历元素:

numbers = [1, 1, 2, 3, 4, 5, 6]>> for i in reversed(range(len(numbers))): ... if numbers[i] % 2 != 0: ... del numbers[i]

reversed() 函数返回一个iterator,我们在文章前面提到。另外,你可以使用range()在迭代过程中向后计数,正如我们前面提到的。这些方法从列表的末端移除元素,确保当前列表的索引永远不会大于列表的长度。

或者更好的是,我们可以使用最Pythonic的方法,即列表理解,可以实现如下:

>>> numbers = [1, 1, 2, 3, 4, 5, 6]

>> numbers = [num for num in numbers if num % 2 == 0]

对于那些以前没有见过这种魔法的人,这相当于定义一个列表,使用for循环,测试一个条件,然后追加到一个列表。通常情况下,这需要4行。但是通过列表理解,我们只用了一行就实现了这个目标!

在 Python 中获得更多的控制和结束循环

这个讨论集中在如何退出 Python 中的循环--特别是如何退出 Python 的 for 循环。我们想鼓励你采取下一步行动,并应用你在这里学到的东西。

就像我们以前说过的,从一小步开始,然后逐步增加到更复杂的例子。试着用 while 循环进行实验。你可能会发现有一种更基本的方式来退出 while 循环,这种方式并不适用于 for 循环--当 while 语句所定义的条件评估为 False 时。

作为另一个扩展,测试一下当你使用带有控制语句的嵌套 for 循环时会发生什么。你会发现你可以修改一个循环,而另一个继续正常执行。通过一点点的练习,你将掌握如何在 Python 中结束一个循环。


本文标签

热门标签

会员评论