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

问题描述 投票:1回答:4

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

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])

该代码是错误的,因为我不知道如何正确地结合起来len()功能和递归。我该怎么办?

python list python-3.x recursion maxlength
4个回答
1
投票

您没有使用递归在这里所有。递归包括调用同一方法中的方法。这样做可以如下的一种方式。请注意,有三种情况在这里,

  1. obj只是一个integer,你需要返回0
  2. objlistegers一个int你需要返回lenlistgth
  3. obj是异构list,你需要递归。

A码例如可以是

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

1
投票

这个怎么样?

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)

...如果你想成为更Python和鸭式吧...

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

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

0
投票

这是最接近您的代码:

def max_length(obj): if isinstance(obj,int): return 0 else: return max(len(obj), max([max_length(i) for i in obj]))


0
投票
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)

这将很好地工作。以上所述的部分代码是不能做出正确的回答。

© www.soinside.com 2019 - 2024. All rights reserved.