如何将此lambda函数转换为def格式?

时间:2018-05-06 16:06:41

标签: python python-2.7 function

我在这里找到了一个问题的答案(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([[[[], []], [[], []]], [[], [], []]])

有人可以告诉我在修剪前和结束时那些大方括号是什么吗?

2 个答案:

答案 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