栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

python list comprehension double for

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python list comprehension double for

让我们分解一下。

一个简单的列表理解:

[x for x in collection]

如果将其分为几部分,这很容易理解:

[A for B in C]

  • A
    是将出现在结果列表中的项目
  • B
    是集合中的每个项目
    C
  • C
    是集合本身。

这样,人们可以写:

[x.lower() for x in words]

为了将列表中的所有单词转换为小写。


这是我们将其与另一个列表类似的情况:

[x for y in collection for x in y] # [A for B in C for D in E]

在这里,发生了一些特别的事情。我们希望最终列表包含

A
项目,并且
A
项目位于
B
项目内部,因此我们必须告诉列表理解者。

  • A
    是将出现在结果列表中的项目
  • B
    是集合中的每个项目
    C
  • C
    是集合本身
  • D
    是集合中的每个项目
    E
    (在本例中也是
    A
  • E
    是另一个集合(在这种情况下,
    B

此逻辑类似于普通的for循环:

for y in collection:     #      for B in C:    for x in y:          #          for D in E: (in this case: for A in B)        # receive x      #   # receive A

为了对此进行扩展,并给出一个很好的示例+解释,假设有火车。

火车引擎(最前面)总是会在那儿(列表理解的结果)

然后,有任意数量的火车车厢,每辆火车车厢的形式为:

for x in y

列表理解可能如下所示:

[z for b in a for c in b for d in c ... for z in y]

这就像有这个常规的for循环:

for b in a:    for c in b:        for d in c: ...     for z in y:         # have z

换句话说,在列表理解中,您无需添加一行并缩进,而只需将下一个循环添加到末尾即可。

回到火车类比:

Engine
-
Car
-
Car
-
Car
Tail

尾巴是什么?在列表理解中,尾巴是很特别的事情。您 不需要 一个,但是如果您有一条尾巴,那么尾巴就是一种条件,请看以下示例:

[line for line in file if not line.startswith('#')]

只要该行不是以井号(

#
)开头,其他行都将被跳过,这将为您提供文件中的每一行。

使用火车“尾巴”的技巧是,在所有循环中都有最终的“引擎”或“结果”时,同时检查其是否为真/假,上面的示例在常规的for循环中看起来像这样:

for line in file:    if not line.startswith('#'):        # have line

请注意: 虽然以我的火车为比喻,火车的尽头只有一个“尾巴”,但条件或“尾巴”可以出现在 每辆 “汽车”或环路之后…

例如:

>>> z = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]>>> [x for y in z if sum(y)>10 for x in y if x < 10][5, 6, 7, 8, 9]

在常规for循环中:

>>> for y in z:    if sum(y)>10:        for x in y: if x < 10:     print x56789


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/633746.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号