Как мне преобразовать эту лямбда-функцию в формат def? - PullRequest
0 голосов
/ 06 мая 2018

Я нашел этот ответ на вопрос здесь ( Как создать рекурсию для произвольных списков? ), но я не научился использовать лямбды .

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 голосов
/ 06 мая 2018

лямбды всегда легко преобразовать в def с помощью одного оператора return:

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
0 голосов
/ 06 мая 2018

Все, что вам нужно сделать, это шлепнуть return спереди.

def prune(tree):
    return [prune(branch) for branch in tree if branch != []]

Если вы хотите разложить понимание списка - и нет никакой реальной причины - это будет:

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
...