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 24 Python
跟老齐学Python之深入变量和引用对象
Sep 24 Python
python继承和抽象类的实现方法
Jan 14 Python
Python实现比较两个文件夹中代码变化的方法
Jul 10 Python
pytorch 转换矩阵的维数位置方法
Dec 08 Python
python3 json数据格式的转换(dumps/loads的使用、dict to str/str to dict、json字符串/字典的相互转换)
Apr 01 Python
Python 的字典(Dict)是如何存储的
Jul 05 Python
解决pycharm中导入自己写的.py函数出错问题
Feb 12 Python
浅谈图像处理中掩膜(mask)的意义
Feb 19 Python
python序列类型种类详解
Feb 26 Python
Python3通过chmod修改目录或文件权限的方法示例
Jun 08 Python
在pycharm中关掉ipython console/PyDev操作
Jun 09 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
phpMyAdmin 安装教程全攻略
2007/03/19 PHP
php_xmlhttp 乱码问题解决方法
2009/08/07 PHP
php header Content-Type类型小结
2011/07/03 PHP
基于php中echo用逗号和用点号的区别详解
2018/01/23 PHP
PHP使用函数用法详解
2018/09/30 PHP
centos7上编译安装php7以php-fpm方式连接apache
2018/11/08 PHP
JQuery之focus函数使用介绍
2013/08/20 Javascript
jquery 快速回到页首的方法
2013/12/05 Javascript
jquery将一个表单序列化为一个对象的方法
2014/01/03 Javascript
js数组去重的常用方法总结
2014/01/24 Javascript
jQuery.extend 函数及用法详细
2015/09/06 Javascript
underscore之Collections_动力节点Java学院整理
2017/07/10 Javascript
详解vue-cli项目中用json-sever搭建mock服务器
2017/11/02 Javascript
详解vuex中mapState,mapGetters,mapMutations,mapActions的作用
2018/04/13 Javascript
vue-cli3搭建项目的详细步骤
2018/12/05 Javascript
详解vue 图片上传功能
2019/04/30 Javascript
在微信小程序中渲染HTML内容3种解决方案及分析与问题解决
2020/01/12 Javascript
基于JS实现快速读取TXT文件
2020/08/25 Javascript
[02:40]DOTA2英雄基础教程 巨牙海民
2013/12/23 DOTA
[01:19:35]DOTA2上海特级锦标赛主赛事日 - 3 败者组第三轮#2Fnatic VS OG第二局
2016/03/05 DOTA
[01:04:35]2018DOTA2亚洲邀请赛 4.3 突围赛 Secret vs VG 第一场
2018/04/04 DOTA
[41:21]夜魇凡尔赛茶话会 第三期02:看图识人
2021/03/11 DOTA
Python爬取qq music中的音乐url及批量下载
2017/03/23 Python
Python第三方库face_recognition在windows上的安装过程
2019/05/03 Python
python在不同条件下的输入与输出
2020/02/13 Python
美国和加拿大计算机和电子产品购物网站:TigerDirect.com
2019/09/13 全球购物
高三政治教学反思
2014/02/06 职场文书
送温暖献爱心活动总结
2014/07/08 职场文书
公务员中国梦演讲稿
2014/08/19 职场文书
介绍信的写法
2015/01/31 职场文书
沈阳故宫导游词
2015/01/31 职场文书
云冈石窟导游词
2015/02/04 职场文书
小学英语教学反思范文
2016/02/15 职场文书
高并发下Redis如何保持数据一致性(避免读后写)
2022/03/18 Redis
windows安装 redis 6.2.6最新步骤详解
2022/04/26 Redis
Java多线程并发FutureTask使用详解
2022/06/28 Java/Android