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 图片验证码代码分享
Jul 04 Python
Tensorflow使用tfrecord输入数据格式
Jun 19 Python
Python实现将HTML转成PDF的方法分析
May 04 Python
Python使用指定端口进行http请求的例子
Jul 25 Python
对python 树状嵌套结构的实现思路详解
Aug 09 Python
Flask框架实现的前端RSA加密与后端Python解密功能详解
Aug 13 Python
Python 中使用 PyMySQL模块操作数据库的方法
Nov 10 Python
windows下Pycharm安装opencv的多种方法
Mar 05 Python
Python基于QQ邮箱实现SSL发送
Apr 26 Python
Python 读取位于包中的数据文件
Aug 07 Python
Python实现AES加密,解密的两种方法
Oct 03 Python
利用python实现汉诺塔游戏
Mar 01 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基础知识介绍
2013/09/17 PHP
php生成百度sitemap站点地图类函数实例
2014/10/17 PHP
php实现图片上传并进行替换操作
2016/03/15 PHP
PHP使用反射机制实现查找类和方法的所在位置
2016/04/22 PHP
Zend Framework教程之Zend_Helpers动作助手ViewRenderer用法详解
2016/07/20 PHP
PHP超低内存遍历目录文件和读取超大文件的方法
2019/05/01 PHP
原生js做的手风琴效果的导航菜单
2013/11/08 Javascript
下拉列表select 由左边框移动到右边示例
2013/12/04 Javascript
JavaScript获取图片真实大小代码实例
2014/09/24 Javascript
AngularJS身份验证的方法
2016/02/17 Javascript
用js写的一个路由(简单实例)
2016/09/24 Javascript
vue如何实现observer和watcher源码解析
2017/03/09 Javascript
源码分析Vue.js的监听实现教程
2017/04/23 Javascript
JS函数内部属性之arguments和this实例解析
2018/10/07 Javascript
JS学习笔记之原型链和利用原型实现继承详解
2019/05/29 Javascript
浅谈layui框架自带分页和表格重载的接口解析问题
2019/09/11 Javascript
JavaScript中如何调用Java方法
2020/09/16 Javascript
vue实现禁止浏览器记住密码功能的示例代码
2021/02/03 Vue.js
读取json格式为DataFrame(可转为.csv)的实例讲解
2018/06/05 Python
如何通过python实现全排列
2020/02/11 Python
Jupyter打开图形界面并画出正弦函数图像实例
2020/04/24 Python
基于Python-turtle库绘制路飞的草帽骷髅旗、美国队长的盾牌、高达的源码
2021/02/18 Python
CSS3实现瀑布流布局与无限加载图片相册的实例代码
2016/12/22 HTML / CSS
CSS3下的渐变文字效果实现示例
2018/03/02 HTML / CSS
BLACKMORES澳洲官网:澳大利亚排名第一的保健品牌
2018/09/27 全球购物
西班牙Polo衫品牌:Polo Club
2020/08/09 全球购物
测试时代收集的软件测试面试题
2013/09/25 面试题
大学生个人总结的自我评价
2013/10/05 职场文书
售后服务科岗位职责范文
2013/11/13 职场文书
护理专业毕业生自荐信
2014/06/15 职场文书
美德少年事迹材料1000字
2014/08/21 职场文书
python如何读取.mtx文件
2021/04/22 Python
pytorch交叉熵损失函数的weight参数的使用
2021/05/24 Python
Python使用openpyxl批量处理数据
2021/06/23 Python
世界无敌的ICOM IC-R9500宽频接收机
2022/03/25 无线电
Alexa停服!网站排名将何去何从?目前还没有替代品。
2022/04/15 杂记