Вы можете, хотя это немного странно:
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
вы можете использовать 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]