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对html代码进行escape编码的方法
May 04 Python
在Python中的Django框架中进行字符串翻译
Jul 27 Python
python追加元素到列表的方法
Jul 28 Python
Python编程中归并排序算法的实现步骤详解
May 04 Python
Python实现简单的多任务mysql转xml的方法
Feb 08 Python
Python之日期与时间处理模块(date和datetime)
Feb 16 Python
关于Pytorch的MNIST数据集的预处理详解
Jan 10 Python
python 中的[:-1]和[::-1]的具体使用
Feb 13 Python
Python 实现将大图切片成小图,将小图组合成大图的例子
Mar 14 Python
Python telnet登陆功能实现代码
Apr 16 Python
Python matplotlib实时画图案例
Apr 23 Python
python实现逢七拍腿小游戏的思路详解
May 26 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 Memcached + APC + 文件缓存封装实现代码
2010/03/11 PHP
PHP中的string类型使用说明
2010/07/27 PHP
php文件夹的创建与删除方法
2015/01/24 PHP
PHP自定义函数实现assign()数组分配到模板及extract()变量分配到模板功能示例
2018/05/23 PHP
你的编程语言可以这样做吗?
2006/09/07 Javascript
JavaScript 克隆数组最简单的方法
2009/02/12 Javascript
JS文本框默认值处理详解
2013/07/10 Javascript
JavaScript父子窗体间的调用方法
2015/03/31 Javascript
jquery中的工具使用方法$.isFunction, $.isArray(), $.isWindow()
2015/08/09 Javascript
浅谈Javascript中的12种DOM节点类型
2016/08/19 Javascript
自学实现angularjs依赖注入
2016/12/20 Javascript
JS实现的DIV块来回滚动效果示例
2017/02/07 Javascript
微信小程序“摇一摇”的实例代码
2017/07/20 Javascript
Windows下使用Nodejs运行js的方法
2017/09/02 NodeJs
详解在HTTPS 项目中使用百度地图 API
2019/04/26 Javascript
微信小程序开发实现的选项卡(窗口顶部/底部TabBar)页面切换功能图文详解
2019/05/14 Javascript
详解Python中__str__和__repr__方法的区别
2015/04/17 Python
Python备份目录及目录下的全部内容的实现方法
2016/06/12 Python
python利用paramiko连接远程服务器执行命令的方法
2017/10/16 Python
利用python实现对web服务器的目录探测的方法
2019/02/26 Python
新手入门Python编程的8个实用建议
2019/07/12 Python
python mysql断开重连的实现方法
2019/07/26 Python
python编写计算器功能
2019/10/25 Python
Python matplotlib以日期为x轴作图代码实例
2019/11/22 Python
Canvas多边形绘制的实现方法
2019/08/05 HTML / CSS
Nice Kicks网上商店:ShopNiceKicks.com
2018/12/25 全球购物
英国最好的包装供应商:Priory Direct
2019/12/17 全球购物
什么叫应用程序域?什么是托管代码?什么是强类型系统?什么是装箱和拆箱?什么是重载?CTS、CLS和CLR分别作何解释?
2012/05/23 面试题
出口公司经理求职简历中的自我评价
2013/10/13 职场文书
在求职信中如何凸显个人优势
2013/10/30 职场文书
推荐信怎么写
2014/05/09 职场文书
消防工作实施方案
2014/06/09 职场文书
经理岗位职责
2015/02/02 职场文书
检讨书格式范文
2015/05/07 职场文书
让人瞬间清醒的句子,句句经典,字字如金
2019/07/08 职场文书
Python趣味挑战之用pygame实现简单的金币旋转效果
2021/05/31 Python