小编典典

python列表理解;压缩列表列表?

python

伙计们 我正在尝试找到问题的最优雅解决方案,并且想知道python是否为我想做的事情内置了任何东西。

我正在做的是这个。我有一个列表,A并且我有一个f接受项目并返回列表的函数。我可以使用列表推导来转换所有内容,A例如:

[f(a) for a in A]

但这返回一个列表列表;

[a1,a2,a3] => [[b11,b12],[b21,b22],[b31,b32]]

我真正想要的是获取扁平化的列表;

[b11,b12,b21,b22,b31,b32]

现在,其他语言也有它。传统上flatmap用函数式编程语言来称呼它,而.Net称它为SelectMany。python有类似的东西吗?有没有一种巧妙的方法可以将函数映射到列表并展平结果?

我要解决的实际问题是: 从目录列表开始,查找所有子目录。所以;

import os
dirs = ["c:\\usr", "c:\\temp"]
subs = [os.listdir(d) for d in dirs]
print subs

currentliy给了我一个列表列表,但是我真的想要一个列表。


阅读 220

收藏
2020-12-20

共1个答案

小编典典

您可以在单个列表理解中嵌套嵌套的迭代:

[filename for path in dirs for filename in os.listdir(path)]

(至少在功能上)等效于:

filenames = []
for path in dirs:
    for filename in os.listdir(path):
        filenames.append(filename)
2020-12-20