如何使用递归计算嵌套列表的最大长度?
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)
你在这里根本没有使用递归。递归涉及在同一个方法中调用一个方法。这样做的一种方法如下。注意这里分三种情况,
- 当
obj
只是一个 int
eger 时,您需要 return 0
- 当
obj
是一个 list
与 int
egers 你需要 return len
gth list
- 当
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)
这会很完美。上面的一些代码没有给出正确的答案。
这是计算嵌套列表中最大长度的代码。
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)
你在这里根本没有使用递归。递归涉及在同一个方法中调用一个方法。这样做的一种方法如下。注意这里分三种情况,
- 当
obj
只是一个int
eger 时,您需要 return0
- 当
obj
是一个list
与int
egers 你需要 returnlen
gthlist
- 当
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)
这会很完美。上面的一些代码没有给出正确的答案。