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网络爬虫采集联想词示例
Feb 11 Python
Python实现从百度API获取天气的方法
Mar 11 Python
讲解Python的Scrapy爬虫框架使用代理进行采集的方法
Feb 18 Python
轻松掌握python设计模式之策略模式
Nov 18 Python
python常见排序算法基础教程
Apr 13 Python
python爬虫入门教程--HTML文本的解析库BeautifulSoup(四)
May 25 Python
Python 3.8新特征之asyncio REPL
May 28 Python
Python 寻找局部最高点的实现
Dec 05 Python
Python常用模块sys,os,time,random功能与用法实例分析
Jan 07 Python
python数字类型math库原理解析
Mar 02 Python
python 安装impala包步骤
Mar 28 Python
python 生成任意形状的凸包图代码
Apr 16 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
Linux下ZendOptimizer的安装与配置方法
2007/04/12 PHP
PHP加Nginx实现动态裁剪图片方案
2014/03/10 PHP
PHP实现多图上传(结合uploadify插件)思路分析
2016/11/30 PHP
php实现与python进行socket通信的方法示例
2017/08/30 PHP
laravel框架上传图片实现实时预览功能
2019/10/14 PHP
Nigma vs Alliance BO5 第五场2.14
2021/03/10 DOTA
jQuery页面滚动浮动层智能定位实例代码
2011/08/23 Javascript
jQuery操作表格(table)的常用方法、技巧汇总
2014/04/12 Javascript
浅谈JavaScript中的作用域和闭包问题
2015/07/07 Javascript
基于Arcgis for javascript实现百度地图ABCD marker的效果
2015/09/12 Javascript
jquery淡入淡出效果简单实例
2016/01/14 Javascript
很全面的JavaScript常用功能汇总集合
2016/01/22 Javascript
JavaScript学习笔记之ES6数组方法
2016/03/25 Javascript
Bootstrap3 input输入框插入glyphicon图标的方法
2016/05/16 Javascript
关于Angular2 + node接口调试的解决方案
2017/05/28 Javascript
基于bootstrap实现多个下拉框同时搜索功能
2017/07/19 Javascript
微信小程序实现笑脸评分功能
2018/11/03 Javascript
vue中eslintrc.js配置最详细介绍
2018/12/21 Javascript
jQuery内容过滤选择器与子元素过滤选择器用法实例分析
2019/02/20 jQuery
基于JS开发微信网页录音功能的实例代码
2019/04/30 Javascript
NodeJS http模块用法示例【创建web服务器/客户端】
2019/11/05 NodeJs
Element InputNumber计数器的使用方法
2020/07/27 Javascript
Vue中关闭弹窗组件时销毁并隐藏操作
2020/09/01 Javascript
vue在图片上传的时候压缩图片
2020/11/18 Vue.js
python实现ftp客户端示例分享
2014/02/17 Python
python开发之for循环操作实例详解
2015/11/12 Python
python图像常规操作
2017/11/11 Python
Python3实现计算两个数组的交集算法示例
2019/04/03 Python
python实现nao机器人手臂动作控制
2019/04/29 Python
Python实现区域填充的示例代码
2021/02/03 Python
瑞典廉价机票预订网站:Seat24
2018/06/19 全球购物
英国领先的在线旅游和休闲零售商:lastminute.com
2019/01/23 全球购物
super关键字的用法
2012/04/10 面试题
廉政教育心得体会
2014/01/01 职场文书
2015社区个人工作总结范文
2015/05/13 职场文书
小学班级管理心得体会
2016/01/07 职场文书