Python中断多重循环的几种方式详解


Posted in Python onFebruary 10, 2020

这篇文章主要介绍了Python中断多重循环的几种方式详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

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使用chardet判断字符串编码的方法
Mar 13 Python
python MySQLdb Windows下安装教程及问题解决方法
May 09 Python
Python实现批量修改文件名实例
Jul 08 Python
Python生成随机数组的方法小结
Apr 15 Python
对Python正则匹配IP、Url、Mail的方法详解
Dec 25 Python
分析经典Python开发工程师面试题
Apr 08 Python
selenium+python实现自动登陆QQ邮箱并发送邮件功能
Dec 13 Python
Python实现图像去噪方式(中值去噪和均值去噪)
Dec 18 Python
带你彻底搞懂python操作mysql数据库(cursor游标讲解)
Jan 06 Python
浅谈图像处理中掩膜(mask)的意义
Feb 19 Python
完美处理python与anaconda环境变量的冲突问题
Apr 07 Python
Python中Cookies导出某站用户数据的方法
May 17 Python
django有外键关系的两张表如何相互查找
Feb 10 #Python
Django重设Admin密码过程解析
Feb 10 #Python
tensorflow实现训练变量checkpoint的保存与读取
Feb 10 #Python
Python单元测试模块doctest的具体使用
Feb 10 #Python
简单了解django文件下载方式
Feb 10 #Python
TensorFlow Saver:保存和读取模型参数.ckpt实例
Feb 10 #Python
tensorflow实现读取模型中保存的值 tf.train.NewCheckpointReader
Feb 10 #Python
You might like
浅谈php和.net的区别
2014/09/28 PHP
thinkPHP3.1验证码的简单实现方法
2016/04/22 PHP
Laravel 6 将新增为指定队列任务设置中间件的功能
2019/08/06 PHP
Dreamweaver jQuery智能提示插件,支持版本提示,支持1.6api
2011/07/31 Javascript
Jquery时间验证和转换工具小例子
2013/07/01 Javascript
动态改变div的z-index属性的简单实例
2013/08/08 Javascript
javascript不可用的问题探究
2013/10/01 Javascript
JS实现定时页面弹出类似QQ新闻的提示框
2013/11/07 Javascript
jQuery中:lt选择器用法实例
2014/12/29 Javascript
JQuery中serialize() 序列化
2015/03/13 Javascript
JavaScript的RequireJS库入门指南
2015/07/01 Javascript
jQuery无刷新分页完整实例代码
2015/10/27 Javascript
不用一句js代码初始化组件
2016/01/27 Javascript
学习使用bootstrap基本控件(table、form、button)
2016/04/12 Javascript
Javascript之Number对象介绍
2016/06/07 Javascript
js实现多图左右切换功能
2016/08/04 Javascript
浅谈JS读取DOM对象(标签)的自定义属性
2016/11/21 Javascript
微信小程序实现滚动消息通知
2018/02/02 Javascript
Vuex mutitons和actions初使用详解
2019/03/04 Javascript
[02:31]2014DOTA2国际邀请赛2009专访:干爹表现出乎意料 看好DK杀回决赛
2014/07/20 DOTA
[36:45]TNC vs VGJ.S 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
[59:48]DOTA2-DPC中国联赛 正赛 VG vs Magma BO3 第一场 1月26日
2021/03/11 DOTA
django获取from表单multiple-select的value和id的方法
2019/07/19 Python
分享8点超级有用的Python编程建议(推荐)
2019/10/13 Python
python代数式括号有效性检验示例代码
2020/10/04 Python
Python word文本自动化操作实现方法解析
2020/11/05 Python
Window10上Tensorflow的安装(CPU和GPU版本)
2020/12/15 Python
使用HTML5 Canvas API控制字体的显示与渲染的方法
2016/03/24 HTML / CSS
Michael Kors英国官网:美国奢侈品品牌
2019/11/13 全球购物
介绍一下SQL Server里面的索引视图
2016/07/31 面试题
Java面试笔试题大全
2016/11/23 面试题
个人自我鉴定总结
2014/03/25 职场文书
汽车促销活动方案
2014/03/31 职场文书
《翻越远方的大山》教学反思
2014/04/13 职场文书
乡镇四风对照检查材料
2014/08/31 职场文书
财务工作失误检讨书
2015/02/19 职场文书