广告位联系
返回顶部
分享到

Python中跳出循环的两种方法

python 来源:互联网 作者:佚名 发布时间:2024-09-20 16:35:40 人浏览
摘要

我们经常遇到循环在进行到某一个特定的值时,需要跳出循环,或跳过这个值,python中早已为我们准备了这样的参数:break,continue 比如下面的for循环: 1 2 for i in range(1,10): print(循环了,i,次) 结果

我们经常遇到循环在进行到某一个特定的值时,需要跳出循环,或跳过这个值,python中早已为我们准备了这样的参数:break,continue

比如下面的for循环:

1

2

for i in range(1,10):

    print('循环了',i,'次')

结果显而易见如图:

当我们想在第三次结束这个循环时可以用break这个参数来跳出循环,代码如下

1

2

3

4

5

for i in range(1,10):

    if i==3:

        break

    else:

        print('循环了',i,'次')

这是for循环就只会进行两次循环就会停止,如果如下:

还有一种参数continue,这个参数表示的是跳出本次循环,即本次循环不参与运算,代码使用如下:

1

2

3

4

5

for i in range(1,10):

    if i==3:

        continue

    else:

        print('循环了',i,'次')

结果如下:

当i=3时,循环是不进行的也就没有了输出结果。 

拓展:Python 跳出嵌套循环的5种方法

很多人说 Python 是给很优雅的语言,但凡事都有个弱点,有些时候对于某种情况,用 Python 实现起来却不那么"优雅"。

例如下面的例子,我们想要跳出这个嵌套循环:

1

2

3

4

5

6

7

for a in list_a:

 

for b in list_b:

 

if condition(a,b):

 

break

关键词 break 只能跳出这个循环中的内循环。那有没有什么方法一次性跳出所有循环? Python 里有没有哪个内置的关键词可以实现呢?

不幸的的是,没有。

有句老话讲的好,"没有对比就没有伤害", Python 做不到,其它的语言却可以,比如万人鄙视的 PHP:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

foreach ($a_list as $a)

 

{

 

foreach ($b_list as $b)

 

{

 

if (condition($a, $b))

 

{

 

break 2; // 跳出两次循环

 

}

 

}

 

}

在 PHP 里 break 关键词后面跟着一个数组,表示要跳出循环的次数,默认值是1,表示跳出一次循环。

这是一个很简洁命令的解决方案,这里必须夸一句 PHP,这里它表现的不错。

不过 Python 毕竟是很灵活的语言,我们有很多方法可以解决上面的问题,下面我就介绍 5 中跳出嵌套循环的方法。

1. 使用"旗帜"变量

这是个有效的解决方案,我们定义一个变量,作为一个"旗帜",例如:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

# 添加"旗帜"变量

 

break_out_flag = False

 

for i in range(5):

 

for j in range(5):

 

if j == 2 and i == 0:

 

break_out_flag = True

 

break

 

if break_out_flag:

 

break

如上面的代码,break_out_flag 作为一个"旗手"告诉这个程序该跳出这个外循环了。

这个代码在执行上没什么问题,不过这显得我们的代码有点乱,因为我们引用了新的变量去解决这个问题,这个新变量并非非要引入的。

2. 引发异常

如果 break 关键词不能达到我们的期望,那么是否可以引入其他的操作呢,比如 Python 的异常处理技术,我们可以使用它跳出嵌套循环:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

# 引发异常

 

try:

 

for i in range(5):

 

for j in range(5):

 

if j == 2 and i == 0:

 

raise StopIteration

 

except StopIteration:

 

pass

就如上面代码所示,我们把异常"exception"当做关键词 break 使用,这样就可以一次跳出所有循环。

3. 使用相同的条件语句

由于一个条件语句可以中断一次循环,那么使用相同的条件语句同样也可以再一次中断一个循环,例如:

1

2

3

4

5

6

7

8

9

10

11

12

13

# 使用相同的条件语句

 

for i in range(5):

 

for j in range(5):

 

if j == 2 and i == 0:

 

break

 

if j == 2 and i == 0:

 

break

上面的代码可行,但并不是一个好的解决方案,至少在效率上很差,因为重复执行一个条件语句会浪费很多时间。

4. 使用 For-Else 语句

Python 里有一个很特殊的语句:"for-else"。 它并不流行以至于很少有人知道它,因为习惯上 else 是搭配 if 来使用。

不过对于这个问题,它却是很有帮助:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

# 使用 For-Else 语句

 

for i in range(5):

 

for j in range(5):

 

if j == 2 and i == 0:

 

break

 

else: # 仅在内循环不中断时执行

 

continue

 

break

上面的代码中显示了 for-else 语句的优势,因为 else 下面的语句只有当内循环执行完成并没有任何中断的时候才执行。

如果对 for-else 还不熟悉,可以看一下下面的代码,是 for-else "翻译"过来的写法:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

# 和 for-else 一样的

 

for i in range(5):

 

for j in range(5):

 

if j == 2 and i == 0:

 

break

 

if not (j == 2 and i == 0):

 

continue

 

break

总之,这个方法很可以,就是 for-else 这种形式不好理解。

5. 将嵌套循环放在一个函数里

如果我们将嵌套循环放在一个函数中,那么跳出嵌套循环是非常简单的,因为我们可以使用 return 这个关键词替代 break 。

1

2

3

4

5

6

7

8

9

10

11

12

13

# 将嵌套循环放在一个函数里

 

def check_sth():

 

for i in range(5):

 

for j in range(5):

 

if j == 2 and i == 0:

 

return

 

check_sth() # 执行这个函数

如上所示,这个解决方案就显得更加优雅了,既不需要"旗帜"变量,也不需要异常处理或是 for-else 语法以及多余的条件判断。

函数的用法在 Python 里是很灵活的,我们可以很容易的创建一个嵌套函数或是一个闭包函数。如果这个跳出嵌套循环的函数在调用它的函数里只使用一次,那么我们可以这样写:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

def out_func():

 

# 这里干点啥

 

def check_sth():

 

for i in range(5):

 

for j in range(5):

 

if j == 2 and i == 0:

 

return

 

# 这里干点别的

 

check_sth() # 执行这个函数

 

# 这里继续干

不过,使用嵌套函数看起来并不怎么"优雅"。

总结

这里我们了解了5种跳出嵌套循环的方法,虽然每种方法都没有 PHP 来的简单直接,但我们也是可以实现这样的操作地。作为编程人员我们应该了解语言的特性,在不同情况下用不同的方法解决问题。


版权声明 : 本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务和不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权, 违法违规的内容, 请发送邮件至2530232025#qq.cn(#换@)举报,一经查实,本站将立刻删除。
原文链接 :
相关文章
  • Python中xml.etree.ElementTree的使用
    xml.etree.ElementTree(简称ElementTree)是Python标准库中用于处理XML文件的模块。它提供了简洁且高效的API,适用于解析、创建和修改XML文档。在需
  • python中concurrent.futures的具体使用
    concurrent.futures是 Python 标准库中用于并行编程的高级模块,它提供了一种高级别的接口来管理线程和进程。通过这个模块,你可以轻松地利用
  • Python中跳出循环的两种方法

    Python中跳出循环的两种方法
    我们经常遇到循环在进行到某一个特定的值时,需要跳出循环,或跳过这个值,python中早已为我们准备了这样的参数:break,continue 比如下面的
  • 解决Python调用df.to_csv()出现中文乱码的问题

    解决Python调用df.to_csv()出现中文乱码的问题
    Python调用df.to_csv()出现中文乱码 1 2 3 4 df = pd.DataFrame(data=total_info, columns=[公司全名, 公司简称, 公司规模, 融资阶段, 区域, 职位名称, 工作经验
  • PyTorch池化层详解及作用

    PyTorch池化层详解及作用
    在深度学习中,池化层(Pooling Layer)是卷积神经网络(CNN)中的关键组成部分。池化层的主要功能是对特征图进行降维和减少计算量,同时
  • python实现列表推导式与生成器的介绍
    列表推导式和生成器是 Python 中的两个非常有用的工具。它们可以帮助你以简洁和高效的方式创建和处理数据集合。了解它们的用法不仅可以
  • python关于图片和base64互转的三种方式

    python关于图片和base64互转的三种方式
    通过cv2进行转换 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 import cv2 import base64 import numpy as np def img_to_base64(img_array): # 传入图片为RGB格式numpy矩阵,
  • Python虚拟环境virtualenv安装的详细教程保姆级(Wi

    Python虚拟环境virtualenv安装的详细教程保姆级(Wi
    虚拟环境安装 工作中我们经常会根据不同的项目切换不同的python环境,如果仅仅是在本地就安装一个python环境,项目移植也要重新配置环境
  • python中eval的用法介绍

    python中eval的用法介绍
    python中eval的用法 eval(字符串) 能够以Python表达式的方式解析并执行字符串,并将返回结果输出。 eval()函数将去掉字符串的两个引号,将其解
  • Python使用切片移动元素位置的代码
    一.基本介绍 1.切片基础 在 Python 中,切片是指从序列类型(如列表、字符串、元组等)中提取子序列的过程。切片的基本语法如下: 1 seq
  • 本站所有内容来源于互联网或用户自行发布,本站仅提供信息存储空间服务,不拥有版权,不承担法律责任。如有侵犯您的权益,请您联系站长处理!
  • Copyright © 2017-2022 F11.CN All Rights Reserved. F11站长开发者网 版权所有 | 苏ICP备2022031554号-1 | 51LA统计