以下是计算嵌套列表中最大长度的代码。
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()
函数和递归。我该怎么办?
答案 0 :(得分: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)
...如果你想要更多的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 :(得分:1)
你根本就没有在这里使用递归。递归invovles在同一个方法中调用方法。一种方法可以如下。请注意,这里有三种情况,
obj
只是int
时,您需要返回0
obj
为list
且int
时,您需要返回len
list
gth
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
答案 2 :(得分:0)
这是您最接近您的代码:
def max_length(obj):
if isinstance(obj,int):
return 0
else:
return max(len(obj), max([max_length(i) for i in obj]))
答案 3 :(得分: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)
这将完美地工作。上面的某些代码没有给出正确的答案。