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)