python支持double吗_python列表理解为double

让我们打破它

一个简单的列表理解:

[x for x in collection]

这很容易理解,如果我们把它分成几部分:

> 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

为了扩大这个,给出一个很好的例子说明,想象有一列火车。

列车引擎(前线)总是在那里(列表理解的结果)

那么,有几辆火车,每辆火车都是以x为单位的

列表理解可能如下所示:

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

这将是像这样常规的循环:

for b in a:

for c in b:

for d in c:

...

for z in y:

# have z

换句话说,而不是沿着一行和缩进,在一个列表的理解,你只需添加下一个循环到最后。

回到火车类比:

发动机 – 汽车 – 汽车 – 尾巴

什么是尾巴?尾巴是列表理解中的特殊事物。你不需要一个,但是如果你有一个尾巴,尾部是一个条件,看这个例子:

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

只要该行不是以一个标题(#)开始,那么这只会让你在文件中的每一行,而其他的只是被跳过。

使用火车“尾巴”的诀窍在于,它与所有循环中的最终“引擎”或“结果”同时检查是真/假,上述示例在常规循环中将如下所示:

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 y in z:

if sum(y)>10:

for x in y:

if x < 10:

print x

5

6

7

8

9


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部