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 相关文章推荐
django自定义Field实现一个字段存储以逗号分隔的字符串
Apr 27 Python
解决Python中由于logging模块误用导致的内存泄露
Apr 23 Python
初步认识Python中的列表与位运算符
Oct 12 Python
详解python使用pip安装第三方库(工具包)速度慢、超时、失败的解决方案
Dec 02 Python
在Pandas中DataFrame数据合并,连接(concat,merge,join)的实例
Jan 29 Python
基于Python2、Python3中reload()的不同用法介绍
Aug 12 Python
在pytorch中查看可训练参数的例子
Aug 18 Python
Python 多线程其他属性以及继承Thread类详解
Aug 28 Python
Python 寻找局部最高点的实现
Dec 05 Python
Python如何在DataFrame增加数值
Feb 14 Python
Anaconda的安装与虚拟环境建立
Nov 18 Python
Python代码,能玩30多款童年游戏!这些有几个是你玩过的
Apr 27 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线性表顺序存储实现代码(增删查改)
2012/02/16 PHP
PHP插入排序实现代码
2013/04/04 PHP
单点登录 Ucenter示例分析
2013/10/29 PHP
JavaScript mapreduce工作原理简析
2012/11/25 Javascript
javascript loadScript异步加载脚本示例讲解
2013/11/14 Javascript
JS运动框架之分享侧边栏动画实例
2015/03/03 Javascript
使用AngularJS创建单页应用的编程指引
2015/06/19 Javascript
JavaScript实现点击按钮就复制当前网址
2015/12/14 Javascript
Bootstrap4一次重大更新 几乎涉及每行代码
2016/05/16 Javascript
JS简单生成两个数字之间随机数的方法
2016/08/03 Javascript
JS字符串统计操作示例【遍历,截取,输出,计算】
2017/03/27 Javascript
js模拟百度模糊搜索的实例
2017/08/04 Javascript
Vue使用NPM方式搭建项目
2018/10/25 Javascript
详解vue中移动端自适应方案
2019/05/05 Javascript
layui点击左侧导航栏,实现不刷新整个页面,只刷新局部的方法
2019/09/25 Javascript
2分钟实现一个Vue实时直播系统的示例代码
2020/06/05 Javascript
[47:53]DOTA2上海特级锦标赛主赛事日 - 1 败者组第一轮#2COL VS Spirit
2016/03/02 DOTA
python实现12306火车票查询器
2017/04/20 Python
[原创]pip和pygal的安装实例教程
2017/12/07 Python
python3.4 将16进制转成字符串的实例
2019/06/12 Python
利用python计算windows全盘文件md5值的脚本
2019/07/27 Python
基于python SMTP实现自动发送邮件教程解析
2020/06/02 Python
python 实现关联规则算法Apriori的示例
2020/09/30 Python
python实现图片,视频人脸识别(opencv版)
2020/11/18 Python
美国高级音响品牌:Master&Dynamic
2018/07/05 全球购物
NOTINO英国:在线购买美容和香水
2020/02/25 全球购物
军人违纪检讨书
2014/02/04 职场文书
高中毕业生的个人自我评价
2014/02/21 职场文书
乡村卫生服务一体化管理实施方案
2014/03/30 职场文书
2015年学校财务工作总结
2015/05/19 职场文书
小学体育组工作总结
2015/08/13 职场文书
小学教师教育随笔
2015/08/14 职场文书
幼儿园教师培训心得体会
2016/01/21 职场文书
react中的DOM操作实现
2021/06/30 Javascript
Window server中安装Redis的超详细教程
2021/11/17 Redis
Go语言编译原理之变量捕获
2022/08/05 Golang