Python 的 for-else 循环结构是如何工作的?

简介: 本文介绍了Python中不太为人熟知但实用的`for-else`循环结构。通过示例讲解了其工作原理:当`for`循环正常结束而未遇到`break`时,执行`else`块。文章提供了两个应用场景——检查素数和列表搜索,帮助理解如何高效使用该结构。最后提醒,若无需条件跳出循环,普通`for`循环已足够。

Python 支持 for-else 循环结构,虽然不太为人所知,但非常实用。如果你使用过 Python 编程,你可能使用过 for 循环来遍历列表等可迭代对象中的元素。但对于某些用例,将 for 循环与 else 子句结合使用可能更有帮助。在本教程中,我们将通过编写几个示例来学习如何使用 for-else 循环,以了解它们的工作原理。

在 Python 中, for-else 循环是一种将 for 循环与 else 子句结合的构造。循环体通常检查条件。如果条件是 True ,则控制将跳出循环。只有当 for 循环在未遇到 break 语句的情况下正常完成时, else 块才会执行。

让我们看看一个通用的 for-else 循环构造:

python

代码解读

复制代码

for item in iterable:
    # loop body
    if condition:
        break
else:
    # else body

这里是如何工作的分解:

  • for 循环遍历 iterable 中的每个项目。
  • 如果 conditionTrue 并且控制从循环中跳出,则跳过 else 块。
  • 如果 for 循环遍历 iterable 中的所有项目——没有遇到跳出循环的条件——则执行 else 块。

示例 1:寻找素数

让我们使用 for-else 循环来检查一个数是否为素数。如您所知,一个数是素数,如果它只能被 1 和它本身整除,并且没有其他因数。

看下面的代码片段:

python

代码解读

复制代码

import math

def is_prime(n):
    if n <= 1:
        return False

    for i in range(2, int(math.sqrt(n))+ 1):
        if n % i == 0:
            print(f"{n} is divisible by {i}. Not a prime number.")
            break
    else:
        # This block executes if the loop did not encounter a break statement
        print(f"{n} is a prime number.")
        return True

在这里, is_prime() 函数首先检查输入数字 n 是否小于或等于 1。如果是,则返回 False ,因为素数都大于 1。记住,最小的素数是 2。

我们使用 for 循环遍历从 2 到 n 的平方根(包含)的数字范围。

  • 如果 n 能被这个范围内的任何 i (2, √n )整除,那么 n 就不是质数,因为我们已经找到了一个因子。函数会打印一条消息并跳出循环。并且跳过 else 块。
  • 如果循环在未找到任何因子——未遇到 break 语句的情况下完成——则执行 else 块。函数打印出 n 是一个质数,并返回 True

您可以通过几次函数调用验证 is_prime() 函数是否按预期工作:

python

代码解读

复制代码

# Test with a non-prime number
is_prime(10)
# Output: 10 is divisible by 2. Not a prime number.


# Test with a prime number
is_prime(13)
# Output: 13 is a prime number.

关于检查素数的笔记

你可能会遍历从 2 到 n 的所有数字来检查是否有因数。但实际上,遍历到 n 的平方根就足够了。为什么?

回想一下,如果 p 是因数,你总能找到一个 q ,使得 p x q = n

  • 如果 n 是一个完全平方数,那么 p = q
  • 如果 n 不是完全平方数,那么你有以下情况。如果 p 小于 √n ,那么 q 大于 √n 。并且如果 q 大于 √n ,那么 p 小于 √n

💡 所以如果你在 √n 之前找不到一个因子,那么在 √n 之后你也找不到。

示例 2:在列表中搜索一个项目

让我们再举一个 for-else 循环有帮助的例子。

以下 search item() 函数接收一个列表和一个项目。目标是遍历列表中的项目并检查项目是否存在。对于这个问题,你可以使用如下 for-else 循环结构:

python

代码解读

复制代码

def search_item(lst, item):
    for i in lst:
        if i == item:
            print(f"Found {item} in the list.")
            break
    else:
        print(f"{item} is not in the list.")

如果找到 item ,控制将跳出循环。只有当项目不在列表中时,才会触发 else 块。

让我们通过几次调用该函数来验证:

ini

代码解读

复制代码

# Test with a list containing the item
search_item([1, 2, 3, 4, 5], 3)
# Output: Found 3 in the list.

# Test with a list not containing the item
search_item([1, 2, 3, 4, 5], 6)
# Output: 6 is not in the list.

我觉得这个关于 Python 的 for-else 循环结构的教程有帮助。尤其是在遍历完所有项目后退出循环——而不提前跳出循环——感兴趣时,这会很有用。话虽如此,如果您不需要有条件地跳出循环,那么您不需要 for-else 循环,一个简单的 for 循环就足够了。


转载来源:https://juejin.cn/post/7487781830663815208

相关文章
|
算法 Python
Python中基本的循环结构
Python中基本的循环结构
408 1
C4.
|
存储 Python
Python的循环结构
Python的循环结构
C4.
278 0
Python语言基础---选择判断循环结构详解
Python语言基础---选择判断循环结构详解
|
存储 缓存 算法
【Python学习篇】Python实验小练习——循环结构(八)
【Python学习篇】Python实验小练习——循环结构(八)
262 1
|
Python
Python中的循环结构
Python中的循环结构
357 0
|
Python
【10月更文挑战第18天】「Mac上学Python 29」基础篇10 - 循环结构与迭代控制
在Python中,循环结构是控制程序执行的重要工具。通过学习本篇内容,您将掌握如何使用for循环和while循环来高效地处理重复任务,并了解break、continue和else的使用方式。同时,我们还会探索嵌套循环和典型应用场景中的实际应用。
330 2
|
Python
Python编程的循环结构小示例(二)
Python编程的循环结构小示例(二)
369 1
2024年最新【Python】循环结构:while 循环(1),阿里巴巴面试常见问题及回答技巧
2024年最新【Python】循环结构:while 循环(1),阿里巴巴面试常见问题及回答技巧
2024年最新【Python】循环结构:while 循环(1),阿里巴巴面试常见问题及回答技巧
|
Python
在Python中,循环结构
【4月更文挑战第7天】Python的循环结构包括`for`和`while`。`for`循环用于遍历序列或可迭代对象,如遍历水果列表打印每个水果。`while`循环在条件为真时重复执行代码块,通常与计数器配合防止无限循环。循环内可使用`break`退出循环或`continue`跳过本次循环剩余部分。务必确保循环有明确的退出条件以避免无限循环。
340 2
在Python中,循环结构
|
机器学习/深度学习 Python
Python编程的循环结构小示例(一)
Python编程的循环结构小示例(一)
345 0

推荐镜像

更多