家伙.我正试图找到一个问题最优雅的解决方案,并想知道python是否内置了我正在尝试做的事情.
我正在做的是这个.我有一个列表,A
我有一个函数f
,它接受一个项目并返回一个列表.我可以使用列表理解来转换所有内容A
;
[f(a) for a in A]
Run Code Online (Sandbox Code Playgroud)
但这会返回列表清单;
[a1,a2,a3] => [[b11,b12],[b21,b22],[b31,b32]]
Run Code Online (Sandbox Code Playgroud)
我真正想要的是得到扁平化的清单;
[b11,b12,b21,b22,b31,b32]
Run Code Online (Sandbox Code Playgroud)
现在,其他语言都有它; 它传统上称为flatmap
函数式编程语言,而.Net称之为SelectMany
.python有类似的东西吗?有没有一种巧妙的方法来映射列表上的函数并使结果变平?
我试图解决的实际问题是这个; 从目录列表开始,找到所有子目录.所以;
import os
dirs = ["c:\\usr", "c:\\temp"]
subs = [os.listdir(d) for d in dirs]
print subs
Run Code Online (Sandbox Code Playgroud)
currentliy给了我一个列表列表,但我真的想要一个列表.
我有以下表格的列表:
[[0, 5.1, 3.5, 1.4, 0.2],
[0, 4.9, 3.0, 1.4, 0.2],
[0, 4.7, 3.2, 1.3, 0.2],
[1, 4.6, 3.1, 1.5, 0.2],
[1, 5.0, 3.6, 1.4, 0.2],
[1, 5.4, 3.9, 1.7, 0.4],
[1, 4.6, 3.4, 1.4, 0.3]]
Run Code Online (Sandbox Code Playgroud)
我想切出第一列并将其作为新元素添加到每行数据(因此在列表中的每个奇数位置),将其更改为以下形式:
[[5.1, 3.5, 1.4, 0.2], [0],
[4.9, 3.0, 1.4, 0.2], [0],
[4.7, 3.2, 1.3, 0.2], [0],
[4.6, 3.1, 1.5, 0.2], [1],
[5.0, 3.6, 1.4, 0.2], [1],
[5.4, 3.9, 1.7, 0.4], [1],
[4.6, 3.4, 1.4, 0.3], [1],]
Run Code Online (Sandbox Code Playgroud)
我怎么能这样做?
到目前为止,我已通过以下方式提取了必要的信息:
targets = [element[0] for element in …
Run Code Online (Sandbox Code Playgroud)