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连接MySQL、MongoDB、Redis、memcache等数据库的方法
Nov 15 Python
Python进程间通信用法实例
Jun 04 Python
Python中map,reduce,filter和sorted函数的使用方法
Aug 17 Python
python如何统计序列中元素
Jul 31 Python
python下解压缩zip文件并删除文件的实例
Apr 24 Python
读取json格式为DataFrame(可转为.csv)的实例讲解
Jun 05 Python
TensorFlow的权值更新方法
Jun 14 Python
Pandas DataFrame数据的更改、插入新增的列和行的方法
Jun 25 Python
Python 根据日志级别打印不同颜色的日志的方法示例
Aug 08 Python
Python计算IV值的示例讲解
Feb 28 Python
Pytorch 使用CNN图像分类的实现
Jun 16 Python
MATLAB 全景图切割及盒图显示的实现步骤
May 14 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实现的简单三角形、矩形周长面积计算器分享
2014/11/18 PHP
php使用数组填充下拉列表框的方法
2015/03/31 PHP
54个提高PHP程序运行效率的方法
2015/07/19 PHP
thinkPHP统计排行与分页显示功能示例
2016/12/02 PHP
php把字符串指定字符分割成数组的方法
2018/03/12 PHP
php7 图形用户界面GUI 开发示例
2020/02/22 PHP
JS Array对象入门分析
2008/10/30 Javascript
js浏览器html5表单验证
2016/10/17 Javascript
HTML页面定时跳转方法解析(2种任选)
2016/12/22 Javascript
html5+CSS 实现禁止IOS长按复制粘贴功能
2016/12/28 Javascript
Angular 2父子组件数据传递之@Input和@Output详解(下)
2017/07/05 Javascript
JavaScript与Java正则表达式写法的区别介绍
2017/08/15 Javascript
深入浅析javascript继承体系
2017/10/23 Javascript
node结合swig渲染摸板的方法
2018/04/11 Javascript
JS使用canvas中的measureText方法测量字体宽度示例
2019/02/02 Javascript
使用js实现一个简单的滚动条过程解析
2019/09/10 Javascript
原生JavaScript实现的无缝滚动功能详解
2020/01/17 Javascript
解决Vue router-link绑定事件不生效的问题
2020/07/22 Javascript
[01:06:19]DOTA2-DPC中国联赛定级赛 LBZS vs SAG BO3第二场 1月8日
2021/03/11 DOTA
Python中的yield浅析
2014/06/16 Python
浅谈用Python实现一个大数据搜索引擎
2017/11/28 Python
python将秒数转化为时间格式的实例
2018/09/16 Python
PyTorch中 tensor.detach() 和 tensor.data 的区别详解
2020/01/06 Python
tensorflow模型保存、加载之变量重命名实例
2020/01/21 Python
pyqt5数据库使用详细教程(打包解决方案)
2020/03/25 Python
Python爬虫小例子——爬取51job发布的工作职位
2020/07/10 Python
css3实现波纹特效、H5实现动态波浪效果
2018/01/31 HTML / CSS
CSS3 文字动画效果
2020/11/12 HTML / CSS
html5 Canvas绘制线条 closePath()实例代码
2012/05/10 HTML / CSS
悦木之源美国官网:Origins美国
2016/08/01 全球购物
电子商务专业个人的自我评价
2013/11/19 职场文书
大学信息公开实施方案
2014/03/09 职场文书
2014年清明节寄语
2014/04/03 职场文书
竞选学习委员演讲稿
2014/09/01 职场文书
2014年家长学校工作总结
2014/11/20 职场文书
python如何正确使用yield
2021/05/21 Python