python list comprehension double for

位置:
vec = [[1,2,3], [4,5,6], [7,8,9]]
print [num for elem in vec for num in elem]      <----- this

>>> [1, 2, 3, 4, 5, 6, 7, 8, 9]

这欺骗了我。
我的理解是ELEM名单从内部列表for elem in vic
我不太明白的用法num,并for num in elem在开始和结束。

python如何解释呢?
它的顺序是什么?

英巴玫瑰:

让我们分解一下。

一个简单的列表理解:

[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 x

5
6
7
8
9

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

python list comprehension double for

python list comprehension返回基于字母的名称

Python List Comprehension-从嵌套数据中提取

List Comprehension如何在Python中完全起作用?

python 3.4 list comprehension-在列表中调用临时变量

將 for 循環轉換為 List Comprehension Python

python list仅当使用list comprehension完全匹配时才替换

Advanced Nested List Comprehension Syntax

list-comprehension引发RuntimeError

使用map或comprehension list python从全局变量创建词典列表

python list comprehension:从列表列表中的每个列表制作多个项目的列表

python list comprehension在一次迭代中产生两个值

python dict和list comprehension用作switch语句-不能按预期工作

引用数组的多个值时,使用 Python List Comprehension 排除重复项

与List <List <double >>不同

使用double []的RAM的List <Double>?

列表列表中的Dict Comprehension python

将 List<List<double> 提取到 list<double>

合并List <List <double [] >>中的某些List <double []>

使用List Comprehension(Pandas)从DataFrames列表中删除DataFrame的列

使用 List Comprehension 进行多个操作的嵌套 for 循环

可以使用While in List Comprehension生成数据

在List Comprehension中将dict.get用于if elif和else

避免使用List Comprehension和/或map嵌套嵌套循环

将Scala List [List [Double]]转换为Java double [] []

Python避免double for循环

Python double for 函数

Scalaz中的Future [Option [List [List [Double]]]到Future [Option [List [List [Double]]]]

如何使用Java 8流API将List <List <Double >>转换为List <Double []>和List <double []>?