下面是计算在嵌套列表中的最大长度的代码。
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()
功能和递归。我该怎么办?
您没有使用递归在这里所有。递归包括调用同一方法中的方法。这样做可以如下的一种方式。请注意,有三种情况在这里,
obj
只是一个int
eger,你需要返回0
obj
是list
egers一个int
你需要返回len
的list
gthobj
是异构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
这个怎么样?
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)
这是最接近您的代码:
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)
这将很好地工作。以上所述的部分代码是不能做出正确的回答。