python小技巧: 用 for ... else 跳出双层嵌套循环

例如:

抓取的成果分10页显示,加起来有50条数据。如今,我们要做的就是从50条数据中下载指定命量的数据。

为了完成那个功用,起初我是如许想的:

1.依次遍历10页数据,将每页数据添加到同一的列中。在那种情况下,哀告10页数据后,所有后果都将包罗在那一栏中;

第二,然后从那个列表中提取指定命量的数据并停行下载。

那种办法确实可行,但是在运算过程中创造了一个功效:挨次运算速度太慢。原因是,无论你想下载几条数据,城市起首收罗所有数据,并将其添加到列表中。那个过程实的太费时间,太不合理了。

为了改动我的设法:要下载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位。

能够通过双层停止轮回完成。其他要留意跳出轮回的设置装备摆设前提,如下

'''进修中碰着成就没人解答?小编创建了一个Python进修交换QQ群:857662006寻觅有情投意合的小同伴,互助合做,群里另有没有错的视频进修教程以及PDF电子书!'''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 breakt = get_data(source, 6)print(target)

源在原始列之外;计算代外提取的位数。

按照菜鸟教程的提醒,for … else的意思如下:

起首,for中的语句和通俗语句没有什么差别。else中的语句会在轮回一般施行的前提下施行(即for在发作后不被infixed

其次,若是for由break固定,则不会施行任何else语句。

我们来阐发一下count是一个差值时的操做过程和后果。

I .计数=3

当count=3时,将失去以下成果

target = [1, 2, 3]

Source包罗四个子列,每个子列包罗五个数字;

先遍历外层停止递归,当遍历到第一个子列之外时,能够满足内层中缀停止递归的前提,即提取第一个子列之外的数3时,target的长度为3,满足len(target)>;=计数,跳出内层停止轮回

此时没有一般的添加内层停止轮回,所以没有法子施行前面的else语句(ps:那里是在else语句下施行continue指令,即持续遍历轮回的外层),然后继续施行else之后的berak语句,跳出轮回的外层。

综上所述,失去目的的后果= [1,2,3]

二。count=8

当count=8时,将失去以下成果

target = [1, 2, 3, 4, 5, 6, 7, 8]

奇异,先拿出外层的第一个子列停止轮回,第一个子列外面只要5个数字。遍历完毕,目的长度为5,你对len (target) >: =count不满意

此时内层for轮回一般完成第一轮遍历,因为for轮回一般完成,所以完成else下的语句,即完成continue指令。那里的continue针对的是轮回的外层,也就是说轮回的外层是从第二个子列中持续拉出的。

当第二子列遍历到第三位时,目的长度为8,满足len (target) >: =count,跳出内层停止轮回

同理,因为此时参加内层停止轮回的情况其实不常见,所以无法施行之前的else语句,然后继续施行else之后的berak语句,跳出外层停止轮回。

综上所述,失去目的的后果=[1,2,3,4,5,6,7,8]

您可以还会对下面的文章感兴趣:

最新评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。