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 控制语句
Nov 03 Python
Python备份目录及目录下的全部内容的实现方法
Jun 12 Python
Python实现信用卡系统(支持购物、转账、存取钱)
Jun 24 Python
在Python中定义和使用抽象类的方法
Jun 30 Python
python SMTP实现发送带附件电子邮件
May 22 Python
Python走楼梯问题解决方法示例
Jul 25 Python
Python3.5内置模块之time与datetime模块用法实例分析
Apr 27 Python
Python利用pandas处理Excel数据的应用详解
Jun 18 Python
python数据类型之间怎么转换技巧分享
Aug 20 Python
使用Python打造一款间谍程序的流程分析
Feb 21 Python
Python如何使用内置库matplotlib绘制折线图
Feb 24 Python
tensorflow模型文件(ckpt)转pb文件的方法(不知道输出节点名)
Apr 22 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 fwrite写入txt文件的时候用 \r\n不能换行的问题
2013/08/06 PHP
async和DOM Script文件加载比较
2014/07/20 PHP
php实现插入数组但不影响原有顺序的方法
2015/03/27 PHP
php curl抓取网页的介绍和推广及使用CURL抓取淘宝页面集成方法
2015/11/30 PHP
php函数传值的引用传递注意事项分析
2016/06/25 PHP
thinkPHP统计排行与分页显示功能示例
2016/12/02 PHP
Yii2框架实现登录、退出及自动登录功能的方法详解
2017/10/24 PHP
清华大学出版的事半功倍系列 javascript全部源代码
2007/05/04 Javascript
javascript检查日期格式的函数[比较全]
2008/10/17 Javascript
js 效率组装字符串 StringBuffer
2009/12/23 Javascript
js实现双向链表互联网机顶盒实战应用实现
2011/10/28 Javascript
js获取URL的参数的方法(getQueryString)示例
2013/09/29 Javascript
浅谈jQuery中ajaxPrefilter的应用
2016/08/01 Javascript
微信小程序中实现一对多发消息详解及实例代码
2017/02/14 Javascript
angular.js + require.js构建模块化单页面应用的方法步骤
2017/07/19 Javascript
使用JavaScript开发跨平台的桌面应用详解
2017/07/27 Javascript
ajax前台后台跨域请求处理方式
2018/02/08 Javascript
AngularJS中重新加载当前路由页面的方法
2018/03/09 Javascript
bootstrap 日期控件 datepicker被弹出框dialog覆盖的解决办法
2019/07/09 Javascript
Node.js fs模块(文件模块)创建、删除目录(文件)读取写入文件流的方法
2019/09/03 Javascript
[54:53]2014 DOTA2国际邀请赛中国区预选赛 LGD-GAMING VS CIS 第二场
2014/05/23 DOTA
[03:48]显微镜下的DOTA2第四期——TP动作
2014/06/20 DOTA
[04:29]DOTA2亚洲邀请赛小组赛第一日 TOP10精彩集锦
2015/02/01 DOTA
PyQt5每天必学之带有标签的复选框
2018/04/19 Python
Python3.6日志Logging模块简单用法示例
2018/06/14 Python
Python清空文件并替换内容的实例
2018/10/22 Python
Python+OpenCV实现图像融合的原理及代码
2018/12/03 Python
python sklearn库实现简单逻辑回归的实例代码
2019/07/01 Python
Python关于拓扑排序知识点讲解
2021/01/04 Python
英国在线花园中心:You Garden
2018/06/03 全球购物
项目资料员岗位职责
2013/12/10 职场文书
中学教师暑期培训方案
2014/08/27 职场文书
2014年幼儿园园长工作总结
2014/12/17 职场文书
遗嘱范文
2015/08/07 职场文书
读《瓦尔登湖》有感:每个人都需要一个瓦尔登湖
2019/10/17 职场文书
python 闭包函数详细介绍
2022/04/19 Python