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中一些自然语言工具的使用的入门教程
Apr 13 Python
在Python的Django框架中为代码添加注释的方法
Jul 16 Python
python中requests小技巧
May 10 Python
Pycharm编辑器技巧之自动导入模块详解
Jul 18 Python
Python实现时钟显示效果思路详解
Apr 11 Python
pandas DataFrame实现几列数据合并成为新的一列方法
Jun 08 Python
python随机数分布random测试
Aug 27 Python
python错误调试及单元文档测试过程解析
Dec 19 Python
Python安装并操作redis实现流程详解
Oct 13 Python
python-图片流传输的思路及示例(url转换二维码)
Dec 21 Python
Pytorch如何切换 cpu和gpu的使用详解
Mar 01 Python
python绘制箱型图
Apr 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
重置版游戏视频
2020/04/09 魔兽争霸
PHP中在数据库中保存Checkbox数据(2)
2006/10/09 PHP
用PHP书写安全的脚本代码
2012/02/05 PHP
php-fpm配置详解
2014/02/12 PHP
PHP+MySQL实现无极限分类栏目的方法
2015/12/23 PHP
laravel 实现登陆后返回登陆前的页面方法
2019/10/03 PHP
JS加ASP二级域名转向的代码
2007/05/17 Javascript
风吟的小型JavaScirpt库 (FY.JS).
2010/03/09 Javascript
Jquery替换已存在于element上的event的方法
2010/03/09 Javascript
二叉树先序遍历的非递归算法具体实现
2014/01/09 Javascript
js实现图片旋转的三种方法
2014/04/10 Javascript
jQuery使用CSS()方法给指定元素同时设置多个样式
2015/03/26 Javascript
js实现支持手机滑动切换的轮播图片效果实例
2015/04/29 Javascript
JavaScript中继承用法实例分析
2015/05/16 Javascript
JavaScript 七大技巧(一)
2015/12/13 Javascript
AngularJS数据源的多种获取方式汇总
2016/02/02 Javascript
JS通过Cookie判断页面是否为首次打开
2016/02/05 Javascript
JS控制文本域只读或可写属性的方法
2016/06/24 Javascript
浅谈通过JS拦截 pushState和replaceState事件
2017/07/21 Javascript
javaScript之split与join的区别(详解)
2017/11/08 Javascript
Vue组件通信的四种方式汇总
2018/02/08 Javascript
原生js实现分页效果
2020/09/23 Javascript
[02:49]DOTA2完美大师赛首日观众采访
2017/11/23 DOTA
Python ZipFile模块详解
2013/11/01 Python
python安装教程
2018/02/28 Python
python爬虫获取百度首页内容教学
2018/12/23 Python
在python中利用最小二乘拟合二次抛物线函数的方法
2018/12/29 Python
利用Python半自动化生成Nessus报告的方法
2019/03/19 Python
python爬虫 urllib模块发起post请求过程解析
2019/08/20 Python
Python常用模块logging——日志输出功能(示例代码)
2019/11/20 Python
iHerb中文官网:维生素、保健品和健康产品
2018/11/01 全球购物
Charles&Keith美国官方网站:新加坡快时尚鞋类和配饰零售商
2019/11/27 全球购物
房地产资料员岗位职责
2014/07/02 职场文书
亚布力滑雪场导游词
2015/02/09 职场文书
体育教师个人工作总结
2015/02/09 职场文书
2015廉洁自律个人总结
2015/02/14 职场文书