你能解释一下这个功能吗?

use*_*527 7 python list-comprehension

def a(n):
    return max([len(n)] + [a(i) for i in n]) if isinstance(n, list) else 0
Run Code Online (Sandbox Code Playgroud)

这是我最近的一次测试,我无法让列表理解得失败.所以基本上这个函数应该返回最大列表的长度(这是我假设基于正确的答案)我会理解,如果不是这部分函数:

+ [a(i) for i in n])
Run Code Online (Sandbox Code Playgroud)

当我看到那个部分时,看起来它增加了迭代的列表长度.有人可以阐明那部分的目的吗?更具体地说,添加的原因.

编辑:所以仔细看之后......看起来函数将第一个列表的长度放在一个列表中,然后放下下一个列表的长度并返回最大值?...这是如何工作的?

sle*_*ica 6

此函数计算树中最大节点的长度(在列表中实现为列表).也许通过一些重命名和重新编写,它会更清楚:

def longest_list_in_tree(tree):
    if not isinstance(tree, list):
        return 0 # This is a leaf-value of the tree, it has "length 0"

    own_length = len(tree)
    longest_descendant_of_each_subtree = [
        longest_list_in_tree(subtree) for subtree in tree
    ]

    return max([own_length] + longest_descendant_of_each_subtree)
Run Code Online (Sandbox Code Playgroud)