Python 如何使用递归计算嵌套列表的最大长度?

Python 如何使用递归计算嵌套列表的最大长度?,python,list,python-3.x,recursion,maxlength,Python,List,Python 3.x,Recursion,Maxlength,下面是计算嵌套列表中最大长度的代码 def max_length(obj): """ Return the maximum length of obj or any of its sublists, if obj is a list. otherwise return 0. @param object|list obj: object to return length of @rtype: int >>> max_length

下面是计算嵌套列表中最大长度的代码

def max_length(obj):
    """
    Return the maximum length of obj or any of its sublists, if obj is a list.
    otherwise return 0.

    @param object|list obj: object to return length of
    @rtype: int

    >>> max_length(17)
    0
    >>> max_length([1, 2, 3, 17])
    4
    >>> max_length([[1, 2, 3, 3], 4, [4, 5]])
    4
    """
    if isinstance(obj,int):
        return 0
    else:
        return max([len(x) for x in obj])
代码是错误的,因为我不知道如何正确地组合函数和递归。我该怎么办?

怎么样

def nested_list(l):
    if type(l) is not list:
        return 0

    lens = [len(l)]

    for x in l:
        lens.append(nested_list(x))
    return max(lens)
。。。如果你想变得更像蟒蛇和鸭子的话

def nested_list(l):
    try:
        lens = [len(l)]
    except TypeError:
        return 0

    for x in l:
        lens.append(nested_list(x))
    return max(lens)

这里根本不使用递归。递归涉及在同一个方法中调用一个方法。这样做的一种方法如下。注意这里有三种情况

  • obj
    只是
    int
    eger时,需要返回
    0
  • obj
    是带有
    int
    egers的
    列表时,您需要返回
    列表的
    len
    gth
  • obj
    是一个异构
    列表时,您需要递归

  • 代码示例可以是

    >>> def max_length(obj):
    ...     if isinstance(obj,int):
    ...         return 0
    ...     elif all(isinstance(i,int) for i in obj):
    ...             return len(obj)
    ...     else:
    ...         return max(max_length(i) for i in obj)
    ... 
    >>> max_length(17)
    0
    >>> max_length([1, 2, 3, 17])
    4
    >>> max_length([[1, 2, 3, 3], 4, [4, 5]])
    4
    

    这是最接近您的代码:

    def最大长度(obj):
    如果存在(obj,int):
    返回0
    其他:
    返回max(len(obj),max([max_length(i)表示obj中的i]))


    这将非常有效。上面的一些代码没有给出正确的答案。

    您没有递归地调用方法;)所以没有递归。
    result = []
    if isinstance(obj, int):
        result.append(0)
    else:
        for sublist in obj:
            result.append(max_length(sublist))
            result.append(len(obj))
    return max(result)