xap*_*ppp -1 python recursion list-comprehension list
这仅用于概念的自学习,可能没有实际用途
我的问题是
我可以只使用递归函数和列表推导来展平未知级别的嵌套列表吗?
如果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]]]
Run Code Online (Sandbox Code Playgroud)
你可以虽然有点奇怪:
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]
Run Code Online (Sandbox Code Playgroud)
您可能希望使用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])]
Run Code Online (Sandbox Code Playgroud)
一个名为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]
Run Code Online (Sandbox Code Playgroud)