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 开发Activex组件方法
Nov 08 Python
Python中用Descriptor实现类级属性(Property)详解
Sep 18 Python
python运行时间的几种方法
Jun 17 Python
Python HTTP客户端自定义Cookie实现实例
Apr 28 Python
解决新版Pycharm中Matplotlib图像不在弹出独立的显示窗口问题
Jan 15 Python
Python元组常见操作示例
Feb 19 Python
Python二叉搜索树与双向链表转换算法示例
Mar 02 Python
pytorch实现MNIST手写体识别
Feb 14 Python
Python opencv相机标定实现原理及步骤详解
Apr 09 Python
python实现斗地主分牌洗牌
Jun 22 Python
python切割图片的示例
Nov 12 Python
一篇文章搞懂python混乱的切换操作与优雅的推导式
Aug 23 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 接口类与抽象类的实际作用
2009/11/26 PHP
PHP 变量的定义方法
2010/01/26 PHP
PHP开源开发框架ZendFramework使用中常见问题说明及解决方案
2014/06/12 PHP
php通过隐藏表单控件获取到前两个页面的url
2014/09/09 PHP
php 批量查询搜狗sogou代码分享
2015/05/17 PHP
WordPress迁移时一些常见问题的解决方法整理
2015/11/24 PHP
header与缓冲区之间的深层次分析
2016/07/30 PHP
php利用云片网实现短信验证码功能的示例代码
2017/11/18 PHP
高性能web开发 如何加载JS,JS应该放在什么位置?
2010/05/14 Javascript
JS鼠标滑过图片时切换图片实现思路
2013/09/12 Javascript
zTree插件之多选下拉菜单实例代码
2013/11/06 Javascript
js确认删除对话框效果的示例代码
2014/02/20 Javascript
js打开windows上的可执行文件示例
2014/05/27 Javascript
仿JQuery输写高效JSLite代码的一些技巧
2015/01/13 Javascript
jquery中radio checked问题
2015/03/16 Javascript
jQuery实现列表的全选功能
2015/03/18 Javascript
jQuery判断元素是否显示 是否隐藏的简单实现代码
2016/05/19 Javascript
JS实现列表的响应式排版(推荐)
2016/09/01 Javascript
在网页中插入百度地图的步骤详解
2016/12/02 Javascript
JavaScript中的遍历详解(多种遍历)
2017/04/07 Javascript
JavaScript 保护变量不被随意修改的实现代码
2017/09/27 Javascript
详解如何为你的angular app构建一个第三方库
2018/12/07 Javascript
python+pyqt实现右下角弹出框
2017/10/26 Python
详解Python在七牛云平台的应用(一)
2017/12/05 Python
Python+Turtle动态绘制一棵树实例分享
2018/01/16 Python
python 去除txt文本中的空格、数字、特定字母等方法
2018/07/24 Python
Python实现的读取/更改/写入xml文件操作示例
2018/08/30 Python
Django DRF路由与扩展功能的实现
2020/06/03 Python
Python使用lambda抛出异常实现方法解析
2020/08/20 Python
CSS3制作圆角图片和椭圆形图片
2016/07/08 HTML / CSS
Booking.com英国官网:全球酒店在线预订网站
2018/04/21 全球购物
请假条格式范文
2014/04/10 职场文书
服务承诺书怎么写
2014/05/24 职场文书
企业年度评优方案
2014/06/02 职场文书
关于读书的演讲稿300字
2014/08/27 职场文书
公司仓管员岗位职责
2015/04/01 职场文书