我有一个列表,该列表列表(列表...)
[ [], [ [] ] ]
我可以制作一个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