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中self的用法
Jun 04 Python
Django使用Celery异步任务队列的使用
Mar 13 Python
python实现汽车管理系统
Nov 30 Python
python实现一个简单的udp通信的示例代码
Feb 01 Python
Python安装Flask环境及简单应用示例
May 03 Python
Django ORM 常用字段与不常用字段汇总
Aug 09 Python
python 调用pyautogui 实时获取鼠标的位置、移动鼠标的方法
Aug 27 Python
Pycharm中Python环境配置常见问题解析
Jan 16 Python
在python中利用dict转json按输入顺序输出内容方式
Feb 27 Python
Python内建序列通用操作6种实现方法
Mar 26 Python
Kears 使用:通过回调函数保存最佳准确率下的模型操作
Jun 17 Python
如何真正的了解python装饰器
Aug 14 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
老机欣赏|中国60年代精品收音机
2021/03/02 无线电
PHP读取xml方法介绍
2013/01/12 PHP
PHP JS Ip地址及域名格式检测代码
2013/09/27 PHP
将FCKeditor导入PHP+SMARTY的实现方法
2015/01/15 PHP
Zend Framework教程之Zend_Db_Table用法详解
2016/03/21 PHP
让innerText在firefox火狐和IE浏览器都能用的写法
2011/05/14 Javascript
Jquery实现侧边栏跟随滚动条固定(兼容IE6)
2014/04/02 Javascript
jQuery 获取/设置/删除DOM元素的属性以a元素为例
2014/05/23 Javascript
javascript函数声明和函数表达式区别分析
2014/12/02 Javascript
13 款最热门的 jQuery 图像 360 度旋转插件推荐
2014/12/09 Javascript
javascript html5实现表单验证
2016/03/01 Javascript
jQuery实现无限往下滚动效果代码
2016/04/16 Javascript
实例讲解Jquery中隐藏hide、显示show、切换toggle的用法
2016/05/13 Javascript
Jquery基础之事件操作详解
2016/06/14 Javascript
vue引入swiper插件的使用实例
2017/07/19 Javascript
动态统计当前输入内容的字节、字符数的实例详解
2017/10/27 Javascript
angularjs1.5 组件内用函数向外传值的实例
2018/09/30 Javascript
浅谈Node 异步IO和事件循环
2019/05/05 Javascript
layer.prompt输入层的例子
2019/09/24 Javascript
Vue中img的src是动态渲染时不显示的解决
2019/11/14 Javascript
如何利用JavaScript编写一个格斗小游戏
2021/01/06 Javascript
DRF跨域后端解决之django-cors-headers的使用
2019/01/27 Python
python实现烟花小程序
2019/01/30 Python
pycharm运行scrapy过程图解
2019/11/22 Python
vue学习笔记之动态组件和v-once指令简单示例
2020/02/29 Python
python使用paramiko实现ssh的功能详解
2020/03/06 Python
html5.2 dialog简介详解
2018/02/27 HTML / CSS
法国在线药房:DoctiPharma
2020/10/21 全球购物
《罗布泊,消逝的仙湖》教学反思
2014/03/01 职场文书
开业主持词
2014/03/21 职场文书
营销部内勤岗位职责
2014/04/30 职场文书
镇人大副主席民主生活会对照检查材料思想汇报
2014/10/01 职场文书
鲁滨逊漂流记读书笔记
2015/06/26 职场文书
教师节领导致辞
2015/07/29 职场文书
关于React Native 无法链接模拟器的问题
2021/06/21 Javascript
用JS写一个发布订阅模式
2021/11/07 Javascript