簡體   English   中英

如何使用遞歸計算嵌套列表的最大長度?

[英]How to use recursion to calculate the max length of a nested list?

這是計算嵌套列表中最大長度的代碼。

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()函數和遞歸。 我該怎么辦?

這個怎么樣?

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)

...如果您想變得更加Pythonic和鴨子式...

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

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

您根本不在這里使用遞歸。 遞歸調用在同一方法內調用一個方法。 執行此操作的一種方法如下。 請注意,這里有三種情況,

  1. obj只是一個int時,您需要返回0
  2. obj是一個listint egers您需要返回len中的GTH list
  3. 如果obj是一個異構list ,則需要遞歸

一個代碼示例可以是

>>> 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 max_length(obj): if isinstance(obj,int): return 0 else: return max(len(obj), max([max_length(i) for i in obj]))

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)

這將完美地工作。 上面的某些代碼沒有給出正確的答案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM