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 01 Python
讲解Python中for循环下的索引变量的作用域
Apr 15 Python
关于Python中异常(Exception)的汇总
Jan 18 Python
100行Python代码实现自动抢火车票(附源码)
Jan 11 Python
TensorFlow实现卷积神经网络CNN
Mar 09 Python
python sys.argv[]用法实例详解
May 25 Python
对python遍历文件夹中的所有jpg文件的实例详解
Dec 08 Python
python pygame实现五子棋小游戏
Oct 26 Python
python3获取当前目录的实现方法
Jul 29 Python
python中图像通道分离与合并实例
Jan 17 Python
浅谈图像处理中掩膜(mask)的意义
Feb 19 Python
Github 使用python对copilot做些简单使用测试
Apr 14 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
收听短波不可能有声音清晰的品质吗
2021/03/01 无线电
扩展你的 PHP 之入门篇
2006/12/04 PHP
php通过文件头检测文件类型通用代码类(zip,rar等)
2010/10/19 PHP
PHP中的按位与和按位或操作示例
2014/01/27 PHP
php版淘宝网查询商品接口代码示例
2014/06/17 PHP
laravel通过a标签从视图向控制器实现传值
2019/10/15 PHP
multiSteps 基于Jquery的多步骤滑动切换插件
2011/07/22 Javascript
ASP.NET jQuery 实例4(复制TextBox的文本到本地剪贴板上)
2012/01/13 Javascript
ExtJs设置GridPanel表格文本垂直居中示例
2013/07/15 Javascript
jQuery点击自身以外地方关闭弹出层的简单实例
2013/12/24 Javascript
使用ajaxfileupload.js实现ajax上传文件php版
2014/06/26 Javascript
jQuery表格插件datatables用法总结
2014/09/05 Javascript
js实现鼠标经过时图片滚动停止的方法
2015/02/16 Javascript
通过JS判断联网类型和连接状态的实现代码
2015/04/01 Javascript
js实现动态创建的元素绑定事件
2016/07/19 Javascript
fckeditor部署到weblogic出现xml无法读取及样式不能显示问题的解决方法
2017/03/24 Javascript
教你5分钟学会用requirejs(必看篇)
2017/07/25 Javascript
详谈js对url进行编码和解码(三种方式的区别)
2017/08/16 Javascript
vue按需引入element Transfer 穿梭框
2017/09/30 Javascript
JavaScript使用小插件实现倒计时的方法讲解
2019/03/11 Javascript
Vue js 的生命周期(看了就懂)(推荐)
2019/03/29 Javascript
微信小程序获取复选框全选反选选中的值(实例代码)
2019/12/17 Javascript
python实现socket客户端和服务端简单示例
2014/02/24 Python
极简的Python入门指引
2015/04/01 Python
python适合人工智能的理由和优势
2019/06/28 Python
python实现机器人卡牌
2019/10/06 Python
python3中numpy函数tile的用法详解
2019/12/04 Python
TensorFlow MNIST手写数据集的实现方法
2020/02/05 Python
模具设计与制造专业求职信
2014/07/19 职场文书
党支部组织生活会整改方案
2014/09/30 职场文书
喝酒驾驶检讨书
2014/10/01 职场文书
2014年单位工作总结范文
2014/11/27 职场文书
2014年除四害工作总结
2014/12/06 职场文书
2016七夕情人节广告语
2016/01/28 职场文书
公司年会晚会开幕词
2019/04/02 职场文书
七年级作文之我的梦想
2019/10/16 职场文书