Python中断多重循环的思路总结


Posted in Python onOctober 04, 2019

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 相关文章推荐
Python的pycurl包用法简介
Nov 13 Python
python实现折半查找和归并排序算法
Apr 14 Python
简单实现python聊天程序
Apr 01 Python
Python利用Django如何写restful api接口详解
Jun 08 Python
python定时关机小脚本
Jun 20 Python
Python面向对象之静态属性、类方法与静态方法分析
Aug 24 Python
Python从单元素字典中获取key和value的实例
Dec 31 Python
详解利用Python scipy.signal.filtfilt() 实现信号滤波
Jun 05 Python
tensorflow如何批量读取图片
Aug 29 Python
django中使用事务及接入支付宝支付功能
Sep 15 Python
python 调用API接口 获取和解析 Json数据
Sep 28 Python
使用bandit对目标python代码进行安全函数扫描的案例分析
Jan 27 Python
python将字母转化为数字实例方法
Oct 04 #Python
Python3.7 pyodbc完美配置访问access数据库
Oct 03 #Python
Django框架model模型对象验证实现方法分析
Oct 02 #Python
Python 线程池用法简单示例
Oct 02 #Python
python multiprocessing多进程变量共享与加锁的实现
Oct 02 #Python
Python shutil模块用法实例分析
Oct 02 #Python
Windows平台Python编程必会模块之pywin32介绍
Oct 01 #Python
You might like
php中根据变量的类型 选择echo或dump
2012/07/05 PHP
PHP使用DOMDocument类生成HTML实例(包含常见标签元素)
2014/06/25 PHP
php获取手机端的号码以及ip地址实例代码
2018/09/12 PHP
php5.5使用PHPMailer-5.2发送邮件的完整步骤
2018/10/14 PHP
jquery isType() 类型判断代码
2011/02/14 Javascript
JavaScript String.replace函数参数实例说明
2013/06/06 Javascript
js获取某月的最后一天日期的简单实例
2013/06/22 Javascript
Javascript 按位与运算符 (&)使用介绍
2014/02/04 Javascript
关于session和cookie的简单理解
2016/06/08 Javascript
基于Bootstrap的后台管理面板 Bootstrap Metro Dashboard
2016/06/17 Javascript
js 判断各种数据类型的简单方法(推荐)
2016/08/29 Javascript
bootstrap 下拉多选框进行多选传值问题代码分析
2017/02/14 Javascript
原生JS实现左右箭头选择日期实例代码
2017/03/14 Javascript
Vue如何从1.0迁移到2.0
2017/10/19 Javascript
vuex的简单使用教程
2018/02/02 Javascript
javascript系统时间设置操作示例
2019/06/17 Javascript
你不可不知的Vue.js列表渲染详解
2019/10/01 Javascript
[52:05]EG vs OG 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/18 DOTA
python操作mysql中文显示乱码的解决方法
2014/10/11 Python
Python计算程序运行时间的方法
2014/12/13 Python
在Python的Flask框架中使用模版的入门教程
2015/04/20 Python
Python批量创建迅雷任务及创建多个文件
2016/02/13 Python
python运行时强制刷新缓冲区的方法
2019/01/14 Python
python scrapy爬虫代码及填坑
2019/08/12 Python
解决Tensorflow占用GPU显存问题
2020/02/03 Python
Python基于pyjnius库实现访问java类
2020/07/31 Python
PyCharm最新激活码(2020/10/27全网最新)
2020/10/27 Python
用python写一个带有gui界面的密码生成器
2020/11/06 Python
python 从list中随机取值的方法
2020/11/16 Python
日本面向世界,国际级的免税在线购物商城:DOKODEMO
2017/02/01 全球购物
美国真皮手袋品牌:GiGi New York
2017/03/10 全球购物
小学生演讲稿
2014/01/12 职场文书
优秀本科生求职推荐信
2014/02/24 职场文书
经典禁毒标语
2014/06/16 职场文书
我的长征观后感
2015/06/09 职场文书
高中运动会前导词
2015/07/20 职场文书