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快速查找算法应用实例
Sep 26 Python
python文件操作之目录遍历实例分析
May 20 Python
Python使用matplotlib实现在坐标系中画一个矩形的方法
May 20 Python
详解Python中dict与set的使用
Aug 10 Python
pycharm远程调试openstack的图文教程
Nov 21 Python
python3.6连接MySQL和表的创建与删除实例代码
Dec 28 Python
Python爬虫包BeautifulSoup异常处理(二)
Jun 17 Python
Python自动化之数据驱动让你的脚本简洁10倍【推荐】
Jun 04 Python
Django 数据库同步操作技巧详解
Jul 19 Python
浅析Windows 嵌入python解释器的过程
Jul 26 Python
Python3 读取Word文件方式
Feb 13 Python
python-xpath获取html文档的部分内容
Mar 06 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无刷新上传文件实现代码
2011/09/19 PHP
解析阿里云ubuntu12.04环境下配置Apache+PHP+PHPmyadmin+MYsql
2013/06/26 PHP
php生成图形(Libchart)实例
2013/11/06 PHP
Thinkphp和Bootstrap结合打造个性的分页样式(推荐)
2016/08/01 PHP
PHP 断点续传实例详解
2017/11/11 PHP
PHPExcel 修改已存在Excel的方法
2018/05/03 PHP
Javascript的IE和Firefox兼容性汇编(zz)
2007/02/02 Javascript
JavaScript 直接操作本地文件的实现代码
2009/12/01 Javascript
JQuery 1.4 中的Ajax问题
2010/01/23 Javascript
jquery获取input表单值的代码
2010/04/19 Javascript
让JavaScript拥有类似Lambda表达式编程能力的方法
2010/09/12 Javascript
jQuery 中使用JSON的实现代码
2011/12/01 Javascript
Nodejs中自定义事件实例
2014/06/20 NodeJs
JS实现简易图片轮播效果的方法
2015/03/25 Javascript
jQuery焦点图轮播特效代码分享(3款)
2015/09/05 Javascript
JQuery中attr属性和jQuery.data()学习笔记【必看】
2016/05/18 Javascript
jsTree使用记录实例
2016/12/01 Javascript
jQuery实现滚动到底部时自动加载更多的方法示例
2018/02/18 jQuery
聊聊Vue 中 title 的动态修改问题
2019/06/11 Javascript
超简单的微信小程序轮播图
2019/11/22 Javascript
Jquery ajax书写方法代码实例解析
2020/06/12 jQuery
在js文件中引入(调用)另一个js文件的三种方法
2020/09/11 Javascript
python中wx将图标显示在右下角的脚本代码
2013/03/08 Python
Python实现多线程下载文件的代码实例
2014/06/01 Python
Python set常用操作函数集锦
2017/11/15 Python
python装饰器深入学习
2018/04/06 Python
Numpy之将矩阵拉成向量的实例
2019/11/30 Python
Python脚本实现Zabbix多行日志监控过程解析
2020/08/26 Python
利用CSS3实现进度条的两种姿势详解
2017/03/21 HTML / CSS
工商管理应届生求职信
2013/10/07 职场文书
外贸主管求职简历的自我评价
2013/10/23 职场文书
教育学专业毕业生的自我鉴定
2013/11/26 职场文书
高三政治教学反思
2014/02/06 职场文书
《狐假虎威》教学反思
2014/02/07 职场文书
大班亲子运动会方案
2014/06/10 职场文书
批评与自我批评范文
2014/10/15 职场文书