python中的lambda递归



我有一个列表,该列表列表(列表...)

[ [], [ [] ] ]

我可以制作一个lambda函数,以返回该树底部列表的长度的总和吗?

这里的一个将返回0,因为仅包含空列表。但这是:

[ ['foo'], [ [ [], [] ] ] ]

将返回3,这是" foo"的长度。这个:

[ 'aa', [], [ ['ab'], [] ] ]

将返回4。

谢谢!

recur = lambda l:len(l) if not isinstance(l,(tuple,list)) else sum(map(recur,l))

我认为会起作用

甚至冷却器(自我引用lambda:))

def myself (*args, **kw):
    caller_frame = currentframe(1)
    code = caller_frame.f_code
    return  FunctionType(code, caller_frame.f_globals)(*args,**kw)
print (lambda l:len(l) if not isinstance(l,(tuple,list)) else sum(map(myself,l)))(some_list)

或Hyperboreus解决方案

lambda a:(lambda f, a: f(f, a))(lambda f, a:len(a) if not isinstance(a,(tuple,list)) else sum(f(f,e) for e in a), a)

这是一个被称为Y-Combinator ...这是一个噩梦,要告诉发生了什么,但它们以某种方式工作:P

最新更新