酷站(www.ku0.com)-致力于为互联网从业者提供动力!

热门关键词:  企业  as  baidu  c4rp3nt3r  美女
【阿里云】采购季上云仅¥223/3年
百度资源

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

来源:互联网搜集 作者:秩名 人气: 发布时间:2019-10-05
本篇文章主要介绍了Python中断多重循环的思路总结,对大家的学习或者工作具有一定的参考学习价值,感兴趣的小伙伴们可以参考一下,也感谢大家对酷站(ku0.com)的支持。

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

版权声明:本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 959677720#qq.cn(#换@) 举报,一经查实,本站将立刻删除。
原文链接:https://www.jb51.net/article/171331.htm

相关文章

  • 教你如何快速自学python

    教你如何快速自学python

    一、作为初学者,应该如何学python? 很多人对python缩进试的简洁表达不以为然。那些都是已混迹于C和JAVA的老鸟已经习惯了花括号。对于初学者,python语言是最好写,最好读的。 二、追求生产力,应该学python python是全能语言,社区庞大......
    06-23
  • python的缩进规则的介绍

    python的缩进规则的介绍

    一般的语言都是通过{}或end来作为代码块的标记,而Python则是通过缩进来识别代码块的。 对于Python的这种缩进风格,喜欢它的人说这是一种乐趣;不喜欢它的人说这是一门需要卡尺的语言,因为需要使用游标卡尺去测量每行代码的缩进。 不管......
    06-23
  • python可以用哪些数据库?

    python可以用哪些数据库?

    数据库分类 早期数据库模型有三种,分别为层次式数据库、网络式数据库和关系型数据库。 而在当今的互联网中,通常把数据库分为两类,即关系型数据库和非关系型数据库。 关系型数据库 关系型数据库是指采用了关系模型来组织数据的数据库,......
    06-23
  • Django Admin上传文件到七牛云的教程

    Django Admin上传文件到七牛云的教程

    中文圈关于Django Admin 上传文件到七牛云的资料和函数库已经是2年前的了,国外的则都是关于AWS S3、Azure Storage一些国外的服务的。我根据Django的文档里提到的存储系统来实现上传文件到七牛云的简单功能。 在Django Admin的表单是根据......
    06-20
  • python中什么是面向对象?

    python中什么是面向对象?

    用面向对象的思维解决问题的重点 当遇到一个需求的时候不用自己去实现,如果自己一步步实现那就是面向过程;应该找一个专门做这个事的人来做。 面向对象(object-oriented ;简称: OO) 至今还没有统一的概念 我们可以把它定义为: 按人们 认......
    06-11
  • python实现凯撒密码、凯撒加解密算法的介绍

    python实现凯撒密码、凯撒加解密算法的介绍

    凯撒密码的原理:计算并输出偏移量为3的凯撒密码的结果 注意:密文是大写字母,在变换加密之前把明文字母都替换为大写字母 def casar(message):# *************begin************# message1=message.upper() #把明文字母变成大写 message......
    06-11
  • pyinstaller打包运行程序时出现缺少plotly库问题的介绍

    pyinstaller打包运行程序时出现缺少plotly库问题的介绍

    用pyinstaller打包tkinter程序,打包后运行exe是报如下错误: 搜索一阵发现是pyinstaller在打包的时候(StartRun.py我要打包的主程序文件)可能会漏掉一些三方库,就在打包的时候加上三方库的绝对路径: pyinstaller StartRun.py -F -p C:\......
    06-02
  • opencv-python的RGB与BGR互转方式的详解

    opencv-python的RGB与BGR互转方式的详解

    一、格式转换 opencv读取图片的默认像素排列是BGR,需要转换。PIL库是RGB格式。 caffe底层的图像处理是基于opencv,其使用的颜色通道顺序与也是BGR(Blue-Green-Red),而日常图片存储时颜色通道顺序是RGB。 在Python中,将RGB顺序的图像转......
    06-02
  • Python进行闭包时绑定变量操作的介绍

    Python进行闭包时绑定变量操作的介绍

    搞不清楚在闭包(closures)中Python是怎样绑定变量的 看这个例子: def create_multipliers():... return [lambda x : i * x for i in range(5)] for multiplier in create_multipliers():... print multiplier(2)... 期望得到下面的输......
    05-29
  • Python新手如何理解循环加载模块?

    Python新手如何理解循环加载模块?

    循环加载模块 假设你有两个文件,a.py和b.py,在这两个文件中互相加载对方,例如: 在a.py中: import bdef f():return b.xprint f() 在b.py中: import ax = 1def g():print a.f() 首先,我们试着加载a.py: import a1 没有问题。也许让......
    05-29

最新更新