python使用for...else跳出双层嵌套循环的方法实例


Posted in Python onMay 17, 2020

背景

周末在写一个爬虫时,遇到这样一种场景:从搜索结果中下载指定数量的文件

例如:搜索结果中共分为10页展示,加起来一共50条数据,现在要做的是从50条数据中下载指定数量的数据

为了实现这个功能,开始我是这样想的:

1、依次遍历10页数据,并且把每页的数据都追加到同一个列表中,这样的话,请求完10页数据后,这个列表中就包含了所有结果;

2、然后再从这个大列表中提取指定数量的数据进行下载即可

这种方法确实可行,但是在运行过程中发现一个问题:程序运行速度太慢了,原因是无论你想下载多少条数据,都会先把所有数据请求下来并追加到列表中,这个过程实在是太耗时了,而且也不合理

所以换一种思路:要下载n条数据,就只提取n条,不提前把所有数据请求下来

具体实现方法

上面举的例子,可以抽象为如下功能

首先有一个嵌套的列表

[[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15],[16,17,18,19,20]]

然后提取这个列表中的数据到一个新的列表中,例如取前3个数字、前5个数字或者前8个数字

可以通过双层for循环来实现,另外要注意设置条件来跳出循环,如下

source = [[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15],[16,17,18,19,20]]
target = []

def get_data(source, count):
 for i in range(0, len(source)+1):
  temp = source[i]
  for j in temp:
   target.append(j)
   if len(target) >= count:
    break

  else:
   continue
  break

t = get_data(source, 6)
print(target)

source代表原列表;count代表提取数字的个数

根据菜鸟教程的提示, for ... else 的意思如下:

1、for 中的语句和普通的没有区别,else 中的语句会在循环正常执行完的情况下执行(即 for 不是通过 break 跳出而中断的);

2、如果for是由于break中断的,则不会执行else语句

来分析下count为不同值时的运行过程及结果

 1、count=3

当count=3时,得到如下结果

target = [1, 2, 3]

source中包含4个子列表,每个子列表包含5个数字;

先遍历外层for循环,当遍历到第一个子列表时,就能够满足内层for循环中断的条件了,即:当提取到第一个子列表的数字3时,target的长度等于3,满足len(target)>=count,跳出内层for循环

由于此时不是正常退出内层for循环,所以不会执行后面的else语句(ps:这里else语句下是执行continue指令,也就是继续遍历外层for循环),然后继续执行else后的berak语句,跳出外层for循环

综上,得到 target = [1, 2, 3] 的结果

2、count=8

当count=3时,得到如下结果

target = [1, 2, 3, 4, 5, 6, 7, 8]

同样,先取出外层for循环的第一个子列表,第一个子列表只有5个数字,当遍历完后,target的长度等于5,不满足len(target)>=count

此时内层for循环正常结束第一轮遍历,由于for循环正常结束,所以执行else下的语句,也就是执行continue指令,这里的continue是针对外层for循环的,也就是说继续取出外层for循环的第二个子列表

当第二个子列表遍历到第三个数字时,target的长度等于8,满足len(target)>=count,,跳出内层for循环

同理,由于此时不是正常退出内层for循环,所以不会执行后面的else语句,然后继续执行else后的berak语句,跳出外层for循环

综上,得到 target =[1, 2, 3, 4, 5, 6, 7, 8] 的结果

总结

到此这篇关于python使用for...else跳出双层嵌套循环的文章就介绍到这了,更多相关python for else跳出双层嵌套循环内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
在Python中关于中文编码问题的处理建议
Apr 08 Python
django开发之settings.py中变量的全局引用详解
Mar 29 Python
python对DICOM图像的读取方法详解
Jul 17 Python
Python对字符串实现去重操作的方法示例
Aug 11 Python
python利用标准库如何获取本地IP示例详解
Nov 01 Python
Python 3.x 安装opencv+opencv_contrib的操作方法
Apr 02 Python
WIn10+Anaconda环境下安装PyTorch(避坑指南)
Jan 30 Python
django与小程序实现登录验证功能的示例代码
Feb 19 Python
Python超越函数积分运算以及绘图实现代码
Nov 20 Python
python 浅谈serial与stm32通信的编码问题
Dec 18 Python
Python约瑟夫生者死者小游戏实例讲解
Jan 04 Python
Python用tkinter实现自定义记事本的方法详解
Mar 31 Python
VSCode配合pipenv搞定虚拟环境的实现方法
May 17 #Python
Python Pandas 对列/行进行选择,增加,删除操作
May 17 #Python
用python打开摄像头并把图像传回qq邮箱(Pyinstaller打包)
May 17 #Python
Python键鼠操作自动化库PyAutoGUI简介(小结)
May 17 #Python
python 实现PIL模块在图片画线写字
May 16 #Python
在python image 中实现安装中文字体
May 16 #Python
Python 判断时间是否在时间区间内的实例
May 16 #Python
You might like
用PHP代码在网页上生成图片
2015/07/01 PHP
PHP开发之归档格式phar文件概念与用法详解【创建,使用,解包还原提取】
2017/11/17 PHP
用js实现层随着内容大小动态渐变改变 推荐
2009/12/19 Javascript
js判断是否为数组的函数: isArray()
2011/10/30 Javascript
datagrid框架的删除添加与修改
2013/04/08 Javascript
jquery live()重复绑定的解决方法介绍
2014/01/03 Javascript
JavaScript利用构造函数和原型的方式模拟C#类的功能
2014/03/06 Javascript
使用JavaScript的ActiveXObject对象检测应用程序是否安装的方法
2014/04/15 Javascript
15款jQuery分布引导插件分享
2015/02/04 Javascript
jQuery Ajax调用WCF服务详细教程
2015/03/31 Javascript
jQuery实现的仿select功能代码
2015/08/19 Javascript
jQuery 实现评论等级好评差评特效
2016/05/06 Javascript
常用Javascript函数与原型功能收藏(必看篇)
2016/10/09 Javascript
node+experss实现爬取电影天堂爬虫
2016/11/20 Javascript
JavaScript 隐性类型转换步骤浅析
2018/03/15 Javascript
angularjs 缓存的使用详解
2018/03/19 Javascript
js实现列表向上无限滚动
2020/01/13 Javascript
[04:22]DOTA2上海特级锦标赛主赛事第四日TOP10
2016/03/06 DOTA
python获取目录下所有文件的方法
2015/06/01 Python
详解python里使用正则表达式的全匹配功能
2017/10/19 Python
Python实现的knn算法示例
2018/06/14 Python
PyCharm2020.1.2社区版安装,配置及使用教程详解(Windows)
2020/08/07 Python
python tkinter实现下载进度条及抖音视频去水印原理
2021/02/07 Python
纯CSS3实现8组超炫酷鼠标滑过图片动画
2016/03/16 HTML / CSS
CSS Houdini实现动态波浪纹效果
2019/07/30 HTML / CSS
迪卡侬英国官网:Decathlon英国
2017/04/08 全球购物
洛杉矶生活休闲而精致的基础品牌:Mika Jaymes
2018/01/07 全球购物
澳大利亚最受欢迎的美发和美容在线商店:Catwalk
2018/12/12 全球购物
小学生考试获奖感言
2014/01/30 职场文书
报关报检委托书
2014/04/08 职场文书
公司领导班子对照检查材料
2014/09/24 职场文书
JS一分钟在github+Jekyll的博客中添加访问量功能的实现
2021/04/03 Javascript
python代码实现备忘录案例讲解
2021/07/26 Python
C3 线性化算法与 MRO之Python中的多继承
2021/10/05 Python
在HTML中引入CSS的几种方式介绍
2021/12/06 HTML / CSS
Java 通过手写分布式雪花SnowFlake生成ID方法详解
2022/04/07 Java/Android