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压缩和解压缩zip文件的教程
May 06 Python
python写入xml文件的方法
May 08 Python
Python实现小数转化为百分数的格式化输出方法示例
Sep 20 Python
Python语言描述KNN算法与Kd树
Dec 13 Python
Python中的并发处理之asyncio包使用的详解
Apr 03 Python
PyTorch读取Cifar数据集并显示图片的实例讲解
Jul 27 Python
Python爬取qq空间说说的实例代码
Aug 17 Python
通过python的matplotlib包将Tensorflow数据进行可视化的方法
Jan 09 Python
使用PyTorch实现MNIST手写体识别代码
Jan 18 Python
Python随机数函数代码实例解析
Feb 09 Python
Python3和PyCharm安装与环境配置【图文教程】
Feb 14 Python
python生成xml时规定dtd实例方法
Sep 21 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&&mysql)四
2006/10/09 PHP
ajax完美实现两个网页 分页功能的实例代码
2013/04/16 PHP
thinkphp中html:list标签传递多个参数实例
2014/10/30 PHP
php实现递归的三种基本方式
2020/07/04 PHP
PHP实现Unicode编码相互转换的方法示例
2020/11/17 PHP
AutoSave/自动存储功能实现
2007/03/24 Javascript
基于jquery的修改当前TAB显示标题的代码
2010/12/11 Javascript
关于js new Date() 出现NaN 的分析
2012/10/23 Javascript
Js日期选择自动填充到输入框(界面漂亮兼容火狐)
2013/08/02 Javascript
jQuery常用操作方法及常用函数总结
2014/06/19 Javascript
javascript实现五星评分功能
2015/11/10 Javascript
Express实现前端后端通信上传图片之存储数据库(mysql)傻瓜式教程(一)
2015/12/10 Javascript
jQuery基本选择器(实例及表单域value的获取方法)
2016/05/20 Javascript
浅谈js for循环输出i为同一值的问题
2017/03/01 Javascript
12个非常有用的JavaScript技巧
2017/05/17 Javascript
浅谈vue的踩坑路
2017/08/31 Javascript
BootStrap模态框和select2合用时input无法获取焦点的解决方法
2017/09/01 Javascript
JS实现二维数组元素的排列组合运算简单示例
2019/01/28 Javascript
vue如何自动化打包测试环境和正式环境的dist/test文件
2019/06/06 Javascript
elementUI vue this.$confirm 和el-dialog 弹出框 移动 示例demo
2019/07/03 Javascript
vue实现表格过滤功能
2019/09/27 Javascript
Python转换HTML到Text纯文本的方法
2015/01/15 Python
django query模块
2019/04/20 Python
对于Python深浅拷贝的理解
2019/07/29 Python
解决python3插入mysql时内容带有引号的问题
2020/03/02 Python
python+appium+yaml移动端自动化测试框架实现详解
2020/11/24 Python
python获取天气接口给指定微信好友发天气预报
2020/12/28 Python
Lookfantastic香港官网:英国知名美妆购物网站
2018/06/19 全球购物
英国领先的餐饮折扣俱乐部:Gourmet Society
2020/07/26 全球购物
学生会主席就职演讲稿
2014/01/14 职场文书
资产运营委托书范本
2014/10/16 职场文书
党小组评议意见
2015/06/02 职场文书
2016年党员公开承诺书格式范文
2016/03/24 职场文书
实习报告范文之电话客服岗位
2019/07/26 职场文书
辞职报告(范文三篇)
2019/08/27 职场文书
Pygame Event事件模块的详细示例
2021/11/17 Python