这仅适用于概念的自学习,可能没有实际用途
我的问题是
我可以只使用递归函数和列表推导来展平未知级别的嵌套列表吗?
如果可以1,我可以只使用list comprehension + lambda函数来达到同样的目的吗?
到目前为止,这一切都可以得到,但似乎无效。
l=[1,[2,3],[4,5,[6,7,8,9]]] # assuming unknown level of nesting
def fun_d(x):
return [fun_d(e) if isinstance(e,list) else e for e in x]
fun_d(l)
Out[25]: [1, [2, 3], [4, 5, [6, 7, 8, 9]]]
答案 0 :(得分:7)
你可以这有点奇怪:
def fun_d(x):
return [i for e in x for i in (fun_d(e) if isinstance(e,list) else [e])]
In[] :
l=[1,[2,3],[4,5,[6,7,8,9]]]
fun_d(l)
Out[]:
[1, 2, 3, 4, 5, 6, 7, 8, 9]
您可能希望使用Sequence
而不是list
,因此其他类型的序列也会被展平。
from typing import Sequence
def fun_d(x):
return [i for e in x for i in (fun_d(e) if isinstance(e, Sequence) and not isinstance(e, str) else [e])]
命名的lambda是微不足道的,对于真正的匿名lambda
,您可以使用y-combinator
只是为了表明这是多么荒谬,一个匿名的递归lambda
:
In []:
lis = [1,[2,3],[4,5,[6,[7,8],9]]]
(lambda f: f(f))(lambda f: (lambda fun_d: lambda x: [i for e in x for i in (fun_d(e) if isinstance(e, list) else [e])])(lambda x: f(f)(x)))(lis)
Out[]:
[1, 2, 3, 4, 5, 6, 7, 8, 9]