Python中断多重循环的思路总结


Posted in Python onOctober 04, 2019

I. 跳出单循环

不管是什么编程语言,都有可能会有跳出循环的需求,比如枚举时,找到一个满足条件的数就终止。跳出单循环是很简单的,比如:

for i in range(10):

  if i > 5:

    print i

    break

然而,我们有时候会需要跳出多重循环,而break只能够跳出一层循环,比如:

for i in range(10):

  for j in range(10):

    if i+j > 5:

      print i,j

      break

这样的代码并非说找到一组 i+j > 5就停止,而是连续找到10组,因为break只跳出了for j in range(10)这一重循环。那么,怎么才能跳出多重呢?在此记录备忘一下。

II. 跳出多重循环

事实上,Python的标准语法是不支持跳出多重循环的,所以只能利用一些技巧,大概的思路有:写成函数、利用笛卡尔积、利用调试。

当然最常用的思路是使用变量标记法

def f():

  flag = 0

  for i in range(10):

    for j in range(i):

      if i+j>5:

        print i,j

        flag = 1

        break

    if flag == 1:

      break

if __name__ == "__main__":

  f()

写成函数

在Python中,函数运行到return这一句就会停止,因此可以利用这一特性,将功能写成函数,终止多重循环。

例如:

def work():

  for i in range(10):

    for j in range(10):

      if i+j > 5:

        return i,j

print work()

利用笛卡尔积

这种方法的思路就是,既然可以跳出单循环,我就将多重循环改写为单循环,这可以利用itertools中的笛卡尔积函数product,例如:

from itertools import product

for i,j in product(range(10), range(10)):

  if i+j > 5:

    print i,j

    break

利用调试模式

笛卡尔积的方式很巧妙,也很简洁,但它只能用于每次循环的集合都是独立的情形,假如每层循环都与前一层紧密相关,就不能用这种技巧了。这时候可以用第一种方法,将它写成函数,另外,还可以利用调试模式。这个利用了调试模式中,只要出现报错就退出的原理,它伪装了一个错误出来。

class Found(Exception):

  pass

try:

  for i in range(10):

    for j in range(i): #第二重循环跟第一重有关

      if i + j > 5:

        raise Found

except Found:

  print i, j

以上就是盘点Python中断多重循环的思路的详细内容,更多请关注三水点靠木其它相关文章!

Python 相关文章推荐
python实现TCP服务器端与客户端的方法详解
Apr 30 Python
详解JavaScript编程中的window与window.screen对象
Oct 26 Python
python3大文件解压和基本操作
Dec 15 Python
Python OpenCV获取视频的方法
Feb 28 Python
Php多进程实现代码
May 07 Python
利用python实现简易版的贪吃蛇游戏(面向python小白)
Dec 30 Python
pyhanlp安装介绍和简单应用
Feb 22 Python
python twilio模块实现发送手机短信功能
Aug 02 Python
Tensorflow 定义变量,函数,数值计算等名字的更新方式
Feb 10 Python
解决pyCharm中 module 调用失败的问题
Feb 12 Python
PyInstaller的安装和使用的详细步骤
Jun 02 Python
Python机器学习之基于Pytorch实现猫狗分类
Jun 08 Python
python将字母转化为数字实例方法
Oct 04 #Python
Python3.7 pyodbc完美配置访问access数据库
Oct 03 #Python
Django框架model模型对象验证实现方法分析
Oct 02 #Python
Python 线程池用法简单示例
Oct 02 #Python
python multiprocessing多进程变量共享与加锁的实现
Oct 02 #Python
Python shutil模块用法实例分析
Oct 02 #Python
Windows平台Python编程必会模块之pywin32介绍
Oct 01 #Python
You might like
PHP字符串的递增和递减示例介绍
2014/02/11 PHP
thinkphp中session和cookie无效的解决方法
2014/12/19 PHP
Laravel实现用户注册和登录
2015/01/23 PHP
PHP版本升级到7.x后wordpress的一些修改及wordpress技巧
2015/12/25 PHP
Laravel中注册Facades的步骤详解
2016/03/16 PHP
使用PHP+MySql+Ajax+jQuery实现省市区三级联动功能示例
2017/09/15 PHP
php5.5使用PHPMailer-5.2发送邮件的完整步骤
2018/10/14 PHP
BOOM vs RR BO3 第二场2.13
2021/03/10 DOTA
Jquery+JSon 无刷新分页实现代码
2010/04/01 Javascript
判断目标是否是window,document,和拥有tagName的Element的代码
2010/05/31 Javascript
new Date()问题在ie8下面的处理方法
2014/07/31 Javascript
JavaScript定义类和对象的方法
2014/11/26 Javascript
基于jquery和svg实现超炫酷的动画特效
2014/12/09 Javascript
JQuery控制div外点击隐藏而div内点击不会隐藏的方法
2015/01/13 Javascript
jQuery使用hide方法隐藏指定元素class样式用法实例
2015/03/30 Javascript
Node.js中的流(Stream)介绍
2015/03/30 Javascript
jQuery遍历节点树方法分析
2016/09/08 Javascript
JS动态计算移动端rem的解决方案
2016/10/14 Javascript
JQuery 动态生成Table表格实例代码
2016/12/02 Javascript
基于JS实现的随机数字抽签实例
2016/12/08 Javascript
BootStrap整体框架之基础布局组件
2016/12/15 Javascript
使用html+js+css 实现页面轮播图效果(实例讲解)
2017/09/21 Javascript
node.js基础知识小结
2018/02/26 Javascript
vue 刷新之后 嵌套路由不变 重新渲染页面的方法
2018/09/13 Javascript
D3.js(v3)+react 实现带坐标与比例尺的柱形图 (V3版本)
2019/05/09 Javascript
微信小程序实现单个卡片左滑显示按钮并防止上下滑动干扰功能
2019/12/06 Javascript
[47:20]DAC2018 4.4 淘汰赛 Optic vs Mineski 第一场
2018/04/05 DOTA
python调用短信猫控件实现发短信功能实例
2014/07/04 Python
Python 详解基本语法_函数_返回值
2017/01/22 Python
详解python使用Nginx和uWSGI来运行Python应用
2018/01/09 Python
python实现差分隐私Laplace机制详解
2019/11/25 Python
termux中matplotlib无法显示中文问题的解决方法
2021/01/11 Python
用CSS3打造HTML5的Logo(实现代码)
2016/06/16 HTML / CSS
年终晚会主持词
2014/03/25 职场文书
党员群众路线学习心得体会
2014/11/04 职场文书
优秀教师事迹材料
2014/12/15 职场文书