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套接字流重定向实例汇总
Mar 03 Python
python字典多键值及重复键值的使用方法(详解)
Oct 31 Python
Python内建模块struct实例详解
Feb 02 Python
python字符串和常用数据结构知识总结
May 21 Python
pyqt5中QThread在使用时出现重复emit的实例
Jun 21 Python
Python中字符串List按照长度排序
Jul 01 Python
使用NumPy读取MNIST数据的实现代码示例
Nov 20 Python
如何在django中添加日志功能
Feb 06 Python
Python pip安装第三方库实现过程解析
Jul 09 Python
python3爬虫中引用Queue的实例讲解
Nov 24 Python
pytorch 实现变分自动编码器的操作
May 24 Python
Python爬虫基础之初次使用scrapy爬虫实例
Jun 26 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文件的实现方法
2007/03/19 PHP
ThinkPHP之R方法实例详解
2014/06/20 PHP
PHP实现通过中文字符比率来判断垃圾评论的方法
2014/10/20 PHP
php检测数组长度函数sizeof与count用法
2014/11/17 PHP
php将html转成wml的WAP标记语言实例
2015/07/08 PHP
php扩展开发入门demo示例
2019/09/23 PHP
laravel框架模型、视图与控制器简单操作示例
2019/10/10 PHP
基于ThinkPHP删除目录及目录文件函数
2020/10/28 PHP
javascript基础的动画教程,直观易懂
2007/01/10 Javascript
use jscript List Installed Software
2007/06/11 Javascript
jQuery ajax 路由和过滤器使用说明
2011/08/02 Javascript
js 获取坐标 通过JS得到当前焦点(鼠标)的坐标属性
2013/01/04 Javascript
jquery动态添加元素事件失效问题解决方法
2014/05/23 Javascript
JQuery做的一个简单的点灯游戏分享
2014/07/16 Javascript
深入解析JavaScript中函数的Currying柯里化
2016/03/19 Javascript
Listloading.js移动端上拉下拉刷新组件
2016/08/04 Javascript
Ajax基础知识详解
2017/02/17 Javascript
Javascript别踩白块儿(钢琴块儿)小游戏实现代码
2017/07/20 Javascript
vue 里面使用axios 和封装的示例代码
2017/09/01 Javascript
highcharts.js数据绑定方式代码实例
2019/11/13 Javascript
解决谷歌搜索技术文章时打不开网页问题的python脚本
2013/02/10 Python
各种Python库安装包下载地址与安装过程详细介绍(Windows版)
2016/11/02 Python
Python基于递归算法实现的走迷宫问题
2017/08/04 Python
python 提取key 为中文的json 串方法
2018/12/31 Python
Python查找数组中数值和下标相等的元素示例【二分查找】
2019/02/13 Python
python pandas cumsum求累计次数的用法
2019/07/29 Python
Python中如何将一个类方法变为多个方法
2019/12/30 Python
Python基础之字符串操作常用函数集合
2020/02/09 Python
python线程join方法原理解析
2020/02/11 Python
详解python的xlwings库读写excel操作总结
2021/02/26 Python
国外软件测试工程师面试题
2016/12/09 面试题
工会主席岗位责任制
2014/02/11 职场文书
美术课外活动总结
2014/07/08 职场文书
高中学生自我评价范文
2014/09/23 职场文书
2014年辅导员工作总结
2014/11/18 职场文书
员工辞退通知书
2015/04/17 职场文书