我在这里找到了一个问题的答案(How to build a recursion for arbitrary lists?),但我还没有学会如何使用 lambdas 。
prune = lambda tree : [prune(branch) for branch in tree if branch != []]
l = [[[[], []], [[], []]], [[], [], []]]
print prune(l)
我检查了很多网站,但我似乎无法将其转换为常规功能,如:
def prune(tree):
for branch in tree:
if branch!=[]:
prune(branch)
return branch
print prune([[[[], []], [[], []]], [[], [], []]])
有人可以告诉我在修剪前和结束时那些大方括号是什么吗?
答案 0 :(得分:3)
你所要做的就是在前面拍一个return
。
def prune(tree):
return [prune(branch) for branch in tree if branch != []]
如果你想分解list comprehension - 并且没有真正的理由 - 它是:
def prune(tree):
for branch in tree:
if branch != []:
yield prune(branch)
或者:
def prune(tree):
branches = []
for branch in tree:
if branch != []:
branches.append(prune(branch))
return branches
答案 1 :(得分:0)
lambdas总是很容易转换为带有单个return语句的def:
f = lambda a: b
总是几乎与
相同def f(a):
return b
如果你需要在没有列表理解的情况下做你的例子:
def prune(tree):
ret = []
for branch in tree:
if branch!=[]:
ret.append(prune(branch))
return ret