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的闭包和装饰器
Feb 26 Python
Python实现计算两个时间之间相差天数的方法
May 10 Python
浅谈numpy中linspace的用法 (等差数列创建函数)
Jun 07 Python
Python实现的人工神经网络算法示例【基于反向传播算法】
Nov 11 Python
详解Python匿名函数(lambda函数)
Apr 19 Python
python实现websocket的客户端压力测试
Jun 25 Python
react+django清除浏览器缓存的几种方法小结
Jul 17 Python
Django框架model模型对象验证实现方法分析
Oct 02 Python
在Python IDLE 下调用anaconda中的库教程
Mar 09 Python
python实现Pyecharts实现动态地图(Map、Geo)
Mar 25 Python
记录一下scrapy中settings的一些配置小结
Sep 28 Python
Python基础知识学习之类的继承
May 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
phpmyadmin 访问被拒绝的真实原因
2009/06/15 PHP
PHP 输出缓存详解
2009/06/20 PHP
php笔记之:有规律大文件的读取与写入的分析
2013/04/26 PHP
手把手教你打印出PDF(关于fpdf的简单应用)
2013/06/25 PHP
php限制ip地址范围的方法
2015/03/31 PHP
PHP中使用CURL发送get/post请求上传图片批处理功能
2018/10/15 PHP
JS option location 页面跳转实现代码
2008/12/27 Javascript
JavaScript 一行代码,轻松搞定浮动快捷留言-V2升级版
2010/04/02 Javascript
基于Jquery的表格隔行换色,移动换色,点击换色插件
2010/12/22 Javascript
基于jQuery.Validate验证库知识点的详解
2013/04/26 Javascript
实例讲解JavaScript中的this指向错误解决方法
2016/06/13 Javascript
使用vue2实现购物车和地址选配功能
2018/03/29 Javascript
jQuery+datatables插件实现ajax加载数据与增删改查功能示例
2018/04/17 jQuery
vue+element加入签名效果(移动端可用)
2019/06/17 Javascript
基于mpvue的简单弹窗组件mptoast使用详解
2019/08/02 Javascript
Nautil 中使用双向数据绑定的实现
2019/10/02 Javascript
Node.js API详解之 string_decoder用法实例分析
2020/04/29 Javascript
vue将data恢复到初始状态 && 重新渲染组件实例
2020/09/04 Javascript
微信小程序实现左滑删除效果
2020/11/18 Javascript
Python数组条件过滤filter函数使用示例
2014/07/22 Python
Python内置函数的用法实例教程
2014/09/08 Python
python实现简单温度转换的方法
2015/03/13 Python
python 简单的多线程链接实现代码
2016/08/28 Python
python if not in 多条件判断代码
2016/09/21 Python
python绘制铅球的运行轨迹代码分享
2017/11/14 Python
python3.6使用tkinter实现弹跳小球游戏
2019/05/09 Python
家庭户外服装:Hawkshead
2017/11/02 全球购物
全世界最美丽的四星和五星级酒店预订:Prestigia.com
2017/11/15 全球购物
Bally巴利中国官网:经典瑞士鞋履、手袋及配饰奢侈品牌
2018/10/09 全球购物
瑞士设计师家具和家居饰品网上商店:Bruno Wickart
2019/03/18 全球购物
Maisons du Monde德国:法国家具和装饰的市场领导者
2019/07/26 全球购物
毕业生求职简历中的自我评价
2013/10/18 职场文书
高三体育教学反思
2014/01/29 职场文书
先进班级集体事迹材料
2014/01/30 职场文书
蜜蜂引路教学反思
2014/02/04 职场文书
项目经理任命书内容
2014/06/06 职场文书