当前位置: 首页 > 后端技术 > Python

Python使用for...else跳出双层嵌套循环

时间:2023-03-26 13:06:59 Python

在写爬虫的时候,有没有遇到过这样的场景:从搜索结果中下载指定数量的文件?例如:搜索结果分10页显示,加起来一共50条数据。你现在需要做的是从50条数据中下载指定数量的数据。为了实现这个功能,我开始是这样想的:1.依次遍历10页数据,将每一页的数据追加到同一个列表中。本例中,在请求了10页数据后,list包含了所有的结果;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=[]defget_data(source,count):foriinrange(0,len(source)+1):temp=source[i]forjintemp:target.append(j)iflen(target)>=count:breakelse:continuebreakt=get_data(source,6)print(target)source代表原始列表;count表示提取数字的个数根据菜鸟教程,for...else的含义如下:1.for中的语句和普通的没有区别,else中的语句在loop情况下执行(即for没有通过break跳出2.如果for被break中断,当count为不同值1时,不执行else语句分析运行过程和结果。当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后面的berk语句,跳出外层for循环总结一下,得到target=[1,2,3]结果2,count=8当count=8时,得到如下结果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]的结果。以上就是for...else跳出双层嵌套循环的内容,希望对大家有所帮助~