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挑选文件夹里宽大于300图片的方法
Mar 05 Python
在Django的模型中执行原始SQL查询的方法
Jul 21 Python
Python解惑之True和False详解
Apr 24 Python
关于python的list相关知识(推荐)
Aug 30 Python
详谈pandas中agg函数和apply函数的区别
Apr 20 Python
Python3中的最大整数和最大浮点数实例
Jul 09 Python
django rest framework vue 实现用户登录详解
Jul 29 Python
python中的线程threading.Thread()使用详解
Dec 17 Python
Python 实现自动完成A4标签排版打印功能
Apr 09 Python
keras中模型训练class_weight,sample_weight区别说明
May 23 Python
Python tkinter制作单机五子棋游戏
Sep 14 Python
python re的findall和finditer的区别详解
Nov 15 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 文件上传全攻略
2010/04/28 PHP
PHP结合Vue实现滚动底部加载效果
2017/12/17 PHP
新浪微博字数统计 textarea字数统计实现代码
2011/08/28 Javascript
JS中typeof与instanceof之间的区别总结
2013/11/14 Javascript
jquery获取当前点击对象的value方法
2014/02/28 Javascript
SyntaxHighlighter 3.0.83使用笔记
2015/01/26 Javascript
函数window.open实现关闭所有的子窗口
2015/08/03 Javascript
贴近用户体验的Jquery日期、时间选择插件
2015/08/19 Javascript
举例讲解JavaScript中关于对象操作的相关知识
2015/11/16 Javascript
js控制li的隐藏和显示实例代码
2016/10/15 Javascript
JS动态生成年份和月份实例代码
2017/02/04 Javascript
JavaScript数据结构之双向链表和双向循环链表的实现
2017/11/28 Javascript
微信小程序实现人脸检测功能
2018/05/25 Javascript
基于vue中对鼠标划过事件的处理方式详解
2018/08/22 Javascript
angular中两种表单的区别(响应式和模板驱动表单)
2018/12/06 Javascript
vue-router源码之history类的浅析
2019/05/21 Javascript
JavaScript中EventBus实现对象之间通信
2020/10/18 Javascript
Python实现读取TXT文件数据并存进内置数据库SQLite3的方法
2017/08/08 Python
基于Django静态资源部署404的解决方法
2019/07/28 Python
Django+boostrap 美化admin后台的操作
2020/03/11 Python
浅谈keras通过model.fit_generator训练模型(节省内存)
2020/06/17 Python
Python3 + Appium + 安卓模拟器实现APP自动化测试并生成测试报告
2021/01/27 Python
CSS3动画特效在活动页中的应用
2020/01/21 HTML / CSS
HTML5所有标签汇总及标签意义解释
2015/03/12 HTML / CSS
GLAMGLOW香港官网:明星出镜前的秘密武器
2017/03/16 全球购物
夏威夷咖啡公司:Hawaii Coffee Company
2019/09/19 全球购物
大学生思想汇报范文
2013/12/31 职场文书
秋季运动会广播稿
2014/02/22 职场文书
工程采购员岗位职责
2014/03/09 职场文书
小学毕业演讲稿
2014/04/25 职场文书
初中学习计划书范文
2014/09/15 职场文书
检讨书范文300字
2015/01/28 职场文书
毛主席纪念堂观后感
2015/06/17 职场文书
学习习近平主席讲话心得体会
2016/01/20 职场文书
anaconda python3.8安装后降级
2021/06/11 Python
Python实现数据的序列化操作详解
2022/07/07 Python