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读文件逐行处理的示例代码分享
Dec 27 Python
python通过floor函数舍弃小数位的方法
Mar 17 Python
在GitHub Pages上使用Pelican搭建博客的教程
Apr 25 Python
python编写Logistic逻辑回归
Dec 30 Python
基于Python实现的ID3决策树功能示例
Jan 02 Python
Python迭代器与生成器基本用法分析
Jul 26 Python
Python实现爬取亚马逊数据并打印出Excel文件操作示例
May 16 Python
使用python绘制温度变化雷达图
Oct 18 Python
Python Numpy 自然数填充数组的实现
Nov 28 Python
python GUI库图形界面开发之PyQt5控件QTableWidget详细使用方法与属性
Feb 25 Python
Python3之外部文件调用Django程序操作model等文件实现方式
Apr 07 Python
Python插件机制实现详解
May 04 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中使用ExcelFileParser处理excel获得数据(可作批量导入到数据库使用)
2010/08/21 PHP
将word转化为swf 如同百度文库般阅读实现思路及代码
2013/08/09 PHP
php设置session值和cookies的学习示例
2014/03/21 PHP
php过滤敏感词的示例
2014/03/31 PHP
php生成html文件方法总结
2014/12/01 PHP
php生成RSS订阅的方法
2015/02/13 PHP
jquery中通过父级查找进行定位示例
2013/06/28 Javascript
一行命令搞定node.js 版本升级
2014/07/20 Javascript
JavaScript中length属性的使用方法
2015/06/05 Javascript
jQuery简单实现仿京东分类导航层效果
2016/06/07 Javascript
Javascript使用uploadify来实现多文件上传
2016/11/16 Javascript
JS实现Cookie读、写、删除操作工具类示例
2018/08/28 Javascript
VUE 实现滚动监听 导航栏置顶的方法
2018/09/11 Javascript
JS实现点击生成UUID的方法完整实例【基于jQuery】
2019/06/12 jQuery
JavaScrip数组去重操作实例小结
2019/06/20 Javascript
vue-cli设置publicPath小记
2020/04/14 Javascript
antd 表格列宽自适应方法以及错误处理操作
2020/10/27 Javascript
Python中的包和模块实例
2014/11/22 Python
python循环监控远程端口的方法
2015/03/14 Python
Python实现Sqlite将字段当做索引进行查询的方法
2016/07/21 Python
python getopt详解及简单实例
2016/12/30 Python
Django重装mysql后启动报错:No module named ‘MySQLdb’的解决方法
2018/04/22 Python
Python线性拟合实现函数与用法示例
2018/12/13 Python
详解Django-channels 实现WebSocket实例
2019/08/22 Python
Python大数据之使用lxml库解析html网页文件示例
2019/11/16 Python
python爬虫请求头设置代码
2020/07/28 Python
大学自荐信
2013/12/12 职场文书
小学教师培训感言
2014/02/11 职场文书
医疗纠纷协议书
2014/04/16 职场文书
《鸟岛》教学反思
2014/04/26 职场文书
生物科学专业毕业生求职信
2014/06/02 职场文书
2014世界杯球队球队口号
2014/06/05 职场文书
房屋过户委托书范本
2014/10/07 职场文书
公安纪律作风整顿剖析材料
2014/10/10 职场文书
新生儿未入户证明
2015/06/23 职场文书
Redis基本数据类型String常用操作命令
2022/06/01 Redis