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使用PyFetion来发送短信的例子
Apr 22 Python
使用Python的Tornado框架实现一个一对一聊天的程序
Apr 25 Python
Django admin实现图书管理系统菜鸟级教程完整实例
Dec 12 Python
matplotlib设置legend图例代码示例
Dec 19 Python
Python多线程中阻塞(join)与锁(Lock)使用误区解析
Apr 27 Python
Pycharm取消py脚本中SQL识别的方法
Nov 29 Python
分享Python切分字符串的一个不错方法
Dec 14 Python
Python 处理图片像素点的实例
Jan 08 Python
python lxml中etree的简单应用
May 10 Python
python实现图片九宫格分割
Mar 07 Python
基于Python获取照片的GPS位置信息
Jan 20 Python
在vscode中启动conda虚拟环境的思路详解
Dec 25 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
fgetcvs在linux的问题
2012/01/15 PHP
PHP读取xml方法介绍
2013/01/12 PHP
基于header的一些常用指令详解
2013/06/06 PHP
PHP使用strtotime获取上个月、下个月、本月的日期
2015/12/30 PHP
Yii框架实现记录日志到自定义文件的方法
2017/05/23 PHP
Jquery Ajax学习实例6 向WebService发出请求,返回DataSet(XML) 异步调用
2010/03/18 Javascript
JS 树形递归实例代码
2010/05/18 Javascript
使用iframe window的scroll方法控制iframe页面滚动
2014/03/05 Javascript
jQuery如何取id有.的值一般的方法是取不到的
2014/04/18 Javascript
JQuery1.8 判断元素是否绑定事件的方法
2014/07/10 Javascript
简单的jquery左侧导航栏和页面选中效果
2014/08/21 Javascript
基于OL2实现百度地图ABCD marker的效果
2015/10/01 Javascript
javascript事件冒泡简单示例
2016/06/20 Javascript
html+js+highcharts绘制圆饼图表的简单实例
2016/08/04 Javascript
自制微信公众号一键排版工具
2016/09/22 Javascript
JS判断输入的字符串是否是数字的方法(正则表达式)
2016/11/29 Javascript
100多个基础常用JS函数和语法集合大全
2017/02/16 Javascript
Vue-cli中为单独页面设置背景色的实现方法
2018/02/11 Javascript
详解在React.js中使用PureComponent的重要性和使用方式
2018/07/10 Javascript
jQuery轻量级表单模型验证插件
2018/10/15 jQuery
你可能从未使用过的11+个JavaScript特性(小结)
2020/01/08 Javascript
解决vue项目router切换太慢问题
2020/07/19 Javascript
浅析Python函数式编程
2018/10/06 Python
python 实现图片旋转 上下左右 180度旋转的示例
2019/01/24 Python
Python os库常用操作代码汇总
2020/11/03 Python
如何利用python 读取配置文件
2021/01/06 Python
HTML5未来发展趋势
2016/02/01 HTML / CSS
KEETSA环保床垫:更好的睡眠,更好的生活!
2016/11/24 全球购物
墨西哥巴士车票在线购买:ClickBus
2018/03/27 全球购物
极简鞋类,赤脚的感觉:Lems Shoes
2019/08/06 全球购物
最畅销的视频游戏享受高达90%的折扣:CDKeys
2020/02/10 全球购物
加拿大户外探险购物网站:SAIL
2020/06/27 全球购物
公司运动会策划方案
2014/05/25 职场文书
2014收银员工作总结范文
2014/12/16 职场文书
教师考核评语大全
2014/12/31 职场文书
运动会加油稿50字
2015/07/21 职场文书