搜索

查看: 3113|回复: 11

[Python] Python嵌套循环的使用

[复制链接]
发表于 2023-5-4 17:22:51 | 显示全部楼层 |阅读模式
Editor 2023-5-4 17:22:51 3113 11 看全部
目录
  • 1 什么是嵌套循环
  • 2 Python 嵌套 for 循环
  • 2.1 嵌套循环打印图案
  • 2.2 在 for 循环中的while循环
  • 2.3 实践:打印一个带有 5 行 3 列星形的矩形图案
  • 3 打破嵌套循环
  • 4 继续嵌套循环
  • 5 使用列表理解的单行嵌套循环
  • 6 Python中的嵌套while循环
  • 6.1 While 循环内的 for 循环
  • 7 何时在 Python 中使用嵌套循环?
    1 什么是嵌套循环
    所谓嵌套循环就是一个外循环的主体部分是一个内循环。内循环或外循环可以是任何类型,例如 while 循环或 for 循环。 例如,外部 for 循环可以包含一个 while 循环,反之亦然。外循环可以包含多个内循环。 循环链没有限制。
    在嵌套循环中,迭代次数将等于外循环中的迭代次数乘以内循环中的迭代次数。在外循环的每次迭代中,内循环执行其所有迭代。 对于外循环的每次迭代,内循环重新开始并在外循环可以继续下一次迭代之前完成其执行。嵌套循环通常用于处理多维数据结构,例如打印二维数组、迭代包含嵌套列表的列表。嵌套循环是控制流语句的一部分,可帮助您了解 Python 的基础知识。

    2 Python 嵌套 for 循环
    在 Python 中,for 循环用于迭代序列,例如列表、字符串、元组,以及其他可迭代对象,例如范围。在 Python 中使用嵌套 for 循环的语法:
    # outer for loop
    for element in sequence
       # inner for loop
       for element in sequence:
           body of inner for loop
       body of outer for loop
    在此示例中,我们在 for 循环中使用了 for 循环。 在本例中,我们打印前十个数字的乘法表。
  • 外部 for 循环使用 range() 函数迭代前十个数字。
  • 对于每个外部数字,内部 for 循环将执行十次。
  • 在内循环的主体中,我们将打印外部数字和当前数的乘积。
  • 内循环只不过是外循环的主体。
    示例:编写一个嵌套的 for 循环程序以在 Python 中打印乘法表。
    # outer loop
    for i in range(1, 11):
        # nested loop
        # to iterate from 1 to 10
        for j in range(1, 11):
            # print multiplication
            print(i * j, end=' ')
        print()
    输出:

    202302220858199.png

    202302220858199.png


  • 在这个程序中,外部 for 循环是从 1 到 10 迭代数字。 range() 返回 10 个数字。 所以外循环的总迭代次数是 10。
  • 在嵌套循环的第一次迭代中,数字是 1。在下一次,它是 2。依此类推,直到 10。
  • 接下来,对于外循环的每次迭代,内循环将执行十次。 内部循环也将执行 10 次,因为我们打印的乘法表最多为 10。
  • 在内部循环的每次迭代中,我们计算了两个数字的乘法。
    2.1 嵌套循环打印图案
    嵌套循环的另一个最常见用途是打印各种星形和数字模式。让我们看看如何使用嵌套循环在 Python 中打印以下模式。

    2023022208581910.png

    2023022208581910.png


    rows = 5
    # outer loop
    for i in range(1, rows + 1):
        # inner loop
        for j in range(1, i + 1):
            print("*", end=" ")
        print('')
  • 在这个程序中,外循环是打印的行数。
  • 行数是五,所以外循环会执行五次。
  • 接下来,内部循环是每行中的总列数。
  • 对于外部循环的每次迭代,列计数都会增加 1。
  • 在外循环的第一次迭代中,列数为 1,下一次为 2。依此类推。
  • 内部循环迭代等于列数。
  • 在内部循环的每次迭代中,我们打印 star。
    2.2 在 for 循环中的while循环
    在一种循环中使用另一种类型的循环非常常见且很有帮助。 我们可以在 for 循环中放置一个 while 循环。假设我们想将列表中的每个名称重复五次:
  • 在这里,我们将使用外部 for 循环迭代列表。
  • 外层for循环每次迭代,内层for循环执行5次,打印当前名称5次。
    names = ['Kelly', 'Jessa', 'Emma']
    # outer loop
    for name in names:
        # inner while loop
        count = 0
        while count
    输出:

    2023022208581911.png

    2023022208581911.png


    2.3 实践:打印一个带有 5 行 3 列星形的矩形图案
    打印以下星形矩形:

    2023022208581912.png

    2023022208581912.png


    # 5 rows
    for name in range(5):
        # 3 column
        for j in range(3):
            print('*', end='')
        print()
    3 打破嵌套循环
    break 语句用于循环内部退出循环。 如果在嵌套循环内使用 break 语句(在另一个循环内循环),它将终止最内层循环。
    在下面的示例中,我们有两个循环。 外部 for 循环使用 range() 函数迭代前四个数字,内部 for 循环也迭代前四个数字。 如果外部编号和内部循环的当前编号相同,则中断内部(嵌套)循环。
    for i in range(4):
        for j in range(4):
            if j == i:
                break
            print(i, j)
    输出:

    2023022208582013.png

    2023022208582013.png


    4 继续嵌套循环
    continue 语句跳过当前迭代并移动到下一个迭代。 在 Python 中,当循环内遇到 continue 语句时,它会跳过它下面的所有语句并立即跳转到下一次迭代。
    在下面的示例中,我们有两个循环。 外部 for 循环迭代第一个列表,内部循环也迭代第二个数字列表。如果外部编号和内部循环的当前编号相同,则移动到内部循环的下一次迭代。
    first = [2, 4, 6]
    second = [2, 4, 6]
    for i in first:
        for j in second:
            if i == j:
                continue
            print(i, '*', j, '= ', i * j)
    输出:

    2023022208582014.png

    2023022208582014.png


    5 使用列表理解的单行嵌套循环
    例如,如果您有两个列表并想要获取它们的所有组合,为了实现这一点,您需要使用两个嵌套循环,如下所述。
    first = [2, 3, 4]
    second = [20, 30, 40]
    final = []
    for i in first:
        for j in second:
            final.append(i+j)
    print(final)
    您可以使用列表压缩和嵌套循环编写更快速、更紧凑的代码,如下所示。
    first = [2, 3, 4]
    second = [20, 30, 40]
    final = [i+j for i in first for j in second]
    print(final)
    输出:

    2023022208582015.png

    2023022208582015.png


    代码编写思路:
  • 首先,编写一个外部 for 循环,它将迭代第一个列表,如 [for i in first]。
  • 接下来,编写一个内部循环,它将在外部循环之后迭代第二个列表,例如 [for i in first for j in second]。
  • 最后,计算外数和内数之和,如 [i+j for i in first for j in second]。
  • 最后,将结果存储在一个新列表中,例如 final = [i+j for i in first for j in second]。
    下面让我们看看其他的例子:
    在这个例子中,我们将在列表中使用两个 for 循环,最终结果将是一个列表列表。 我们不会在每个列表中包含相同的数字。 我们将使用 if 条件过滤它们。
    final = [[x, y] for x in [10, 20, 30] for y in [30, 10, 50] if x != y]
    print(final)
    输出:

    2023022208582016.png

    2023022208582016.png


    6 Python中的嵌套while循环
    在 Python 中,while 循环语句在特定条件为真时重复执行代码块。 当数字迭代不固定时,我们使用 while 循环。在本节中,我们将了解如何在另一个 while 循环中使用 while 循环。在 Python 中编写嵌套的 while 循环语句的语法如下:
    while expression:
       while expression:
          statement(s)
       statement(s)
    在下面例子中,我们将在每行打印前 10 个数字 5 次。
    i = 1
    while i
    输出:

    2023022208582017.png

    2023022208582017.png


    6.1 While 循环内的 for 循环
    有时在另一种循环中使用一种循环会很有帮助。 我们可以在while循环里面放一个for循环。假设我们想要打印从 1 到 100 的所有完美数字。
  • 在这里,我们将使用 while 循环迭代前 100 个数字。
  • 在外部while循环的每次迭代中,内部for循环从1到当前外部数字执行,以检查当前数字是否为完美数字。(完美数字是一个数学概念,感兴趣的读者可再深入查询)
    print('Show Perfect number fom 1 to 100')
    n = 2
    # outer while loop
    while n
    输出:

    2023022208582018.png

    2023022208582018.png


    7 何时在 Python 中使用嵌套循环?
  • 当您有需要通过相同函数循环的嵌套数组或列表时,嵌套循环很方便。
  • 当您想使用行和列打印不同的星形和数字模式时。
    记住时间复杂度。 让我们通过 Python 中嵌套 for 循环如何工作的示例来理解这一点。我们使用 for 循环迭代序列或可迭代的给定元素。 就像我在列表中一样。 这里的时间复杂度是 O(n),因为我们正在迭代列表中的所有项目。执行步骤(迭代)的数量决定了循环的时间复杂度。当您使用嵌套循环并且外部和内部循环都在没有任何 if 条件的情况下运行时,时间复杂度为 O(n^2),因为对于所有 n 个元素,代码都会执行 n 次。
    numbers = [[1, 2, 3], [4, 5, 6]]
    cnt = 0
    for i in numbers:
        for j in i:
            print('iteration', cnt, end=': ')
            print(j)
            cnt = cnt + 1
    输出:

    2023022208582019.png

    2023022208582019.png


    如果您在内部循环中给出一个条件,该条件将在某些元素之后停止执行,并且不执行内部循环或外部循环的所有 n 次迭代,那么它的时间复杂度会更小。
    当您没有更好的选择时使用嵌套循环,请记住编写高效且紧凑的代码远胜于编写复杂的代码。
    到此这篇关于Python嵌套循环的使用的文章就介绍到这了,更多相关Python嵌套循环内容请搜索知鸟论坛以前的文章或继续浏览下面的相关文章希望大家以后多多支持知鸟论坛
  • 回复

    使用道具 举报

    发表于 2023-6-29 17:23:50 | 显示全部楼层
    计划你大爷计j 2023-6-29 17:23:50 看全部
    楼主太厉害了!楼主,I*老*虎*U!我觉得知鸟论坛真是个好地方!
    回复

    使用道具 举报

    发表于 2023-6-29 18:52:52 | 显示全部楼层
    我是的十八簿 2023-6-29 18:52:52 看全部
    论坛不能没有像楼主这样的人才啊!我会一直支持知鸟论坛
    回复

    使用道具 举报

    发表于 2023-6-30 20:42:35 | 显示全部楼层
    123456868 2023-6-30 20:42:35 看全部
    其实我一直觉得楼主的品味不错!呵呵!知鸟论坛太棒了!
    回复

    使用道具 举报

    发表于 2023-7-3 11:26:43 | 显示全部楼层
    冀苍鸾 2023-7-3 11:26:43 看全部
    这东西我收了!谢谢楼主!知鸟论坛真好!
    回复

    使用道具 举报

    发表于 2023-7-3 15:43:26 | 显示全部楼层
    惜颜705 2023-7-3 15:43:26 看全部
    论坛不能没有像楼主这样的人才啊!我会一直支持知鸟论坛
    回复

    使用道具 举报

    发表于 2023-7-3 17:53:38 | 显示全部楼层
    戏做顿 2023-7-3 17:53:38 看全部
    楼主发贴辛苦了,谢谢楼主分享!我觉得知鸟论坛是注册对了!
    回复

    使用道具 举报

    发表于 2023-7-4 12:27:32 | 显示全部楼层
    掌舵的鱼1987 2023-7-4 12:27:32 看全部
    楼主,大恩不言谢了!知鸟论坛是最棒的!
    回复

    使用道具 举报

    发表于 2023-7-4 12:32:48 | 显示全部楼层
    墙和鸡蛋 2023-7-4 12:32:48 看全部
    这东西我收了!谢谢楼主!知鸟论坛真好!
    回复

    使用道具 举报

    发表于 2023-7-4 17:07:50 | 显示全部楼层
    小妖花满楼满fx 2023-7-4 17:07:50 看全部
    论坛不能没有像楼主这样的人才啊!我会一直支持知鸟论坛
    回复

    使用道具 举报

    • 您可能感兴趣
    点击右侧快捷回复 【请勿灌水】
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则 返回列表

    RSS订阅| SiteMap| 小黑屋| 知鸟论坛
    联系邮箱E-mail:zniao@foxmail.com
    快速回复 返回顶部 返回列表