2016-03-02 27 views
1

这是计算嵌套列表中最大长度的代码。如何使用递归计算嵌套列表的最大长度?

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()函数和递归。我该怎么办?

+2

你是不是调用方法递归一个;),这样就没有递归。 – Rob

回答

1

你是不是在这里使用递归的。递归invovles在同一个方法内调用一个方法。这样做的一种方式如下。请注意,有三种情况在这里,

  1. obj只是一个int埃格尔,你需要返回0
  2. objlistint 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 
+0

这清除了我的困惑,谢谢 – 1412

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