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中的装饰器、闭包和functools的教程
Apr 02 Python
介绍Python中的一些高级编程技巧
Apr 02 Python
Python中不同进制互相转换(二进制、八进制、十进制和十六进制)
Apr 05 Python
各个系统下的Python解释器相关安装方法
Oct 12 Python
Python字符串拼接六种方法介绍
Dec 18 Python
Tensorflow使用tfrecord输入数据格式
Jun 19 Python
python实现单链表的方法示例
Sep 03 Python
Python Django模板之模板过滤器与自定义模板过滤器示例
Oct 18 Python
Python with语句和过程抽取思想
Dec 23 Python
Python使用configparser库读取配置文件
Feb 22 Python
关于Python解包知识点总结
May 05 Python
Python函数__new__及__init__作用及区别解析
Aug 31 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
Laravel 5框架学习之子视图和表单复用
2015/04/09 PHP
jQuery Ajax之load()方法
2009/10/12 Javascript
Jquery截取中文字符串的实现代码
2010/12/22 Javascript
js获取系统的根路径实现介绍
2013/09/08 Javascript
纯JS实现根据CSS的class选择DOM
2014/03/22 Javascript
jquery下拉select控件操作方法分享(jquery操作select)
2014/03/25 Javascript
SeaJS 与 RequireJS 的差异对比
2014/12/08 Javascript
JS获取时间的方法
2015/01/21 Javascript
浅谈javascript中call()、apply()、bind()的用法
2015/04/20 Javascript
JQuery使用index方法获取Jquery对象数组下标的方法
2015/05/18 Javascript
在Web项目中引入Jquery插件报错的完美解决方案(图解)
2016/09/19 Javascript
JS动态生成年份和月份实例代码
2017/02/04 Javascript
Vue+axios 实现http拦截及路由拦截实例
2017/04/25 Javascript
node.js中express-session配置项详解
2017/05/31 Javascript
详解webpack+vue-cli项目打包技巧
2017/06/17 Javascript
vue父组件向子组件(props)传递数据的方法
2018/01/02 Javascript
js实现限定区域范围拖拉拽效果
2020/11/20 Javascript
python实现汉诺塔递归算法经典案例
2021/03/01 Python
Python数据结构与算法之常见的分配排序法示例【桶排序与基数排序】
2017/12/15 Python
详解用TensorFlow实现逻辑回归算法
2018/05/02 Python
python 实现求解字符串集的最长公共前缀方法
2018/07/20 Python
Python列表切片操作实例总结
2019/02/19 Python
PyQt4编程之让状态栏显示信息的方法
2019/06/18 Python
对PyQt5中的菜单栏和工具栏实例详解
2019/06/20 Python
Python 多线程搜索txt文件的内容,并写入搜到的内容(Lock)方法
2019/08/23 Python
Python实现点云投影到平面显示
2020/01/18 Python
keras实现theano和tensorflow训练的模型相互转换
2020/06/19 Python
详解向scrapy中的spider传递参数的几种方法(2种)
2020/09/28 Python
Django中日期时间型字段进行年月日时分秒分组统计
2020/11/27 Python
使用HTML5加载音频和视频的实现代码
2020/11/30 HTML / CSS
英国玛莎百货新西兰:Marks & Spencer New Zealand
2019/07/21 全球购物
致百米运动员广播稿
2014/01/29 职场文书
小学英语课后反思
2014/04/26 职场文书
国际贸易本科毕业生求职信
2014/09/26 职场文书
工作时间调整通知
2015/04/24 职场文书
简单谈谈Python面向对象的相关知识
2021/06/28 Python