![](/img/trans.png)
[英]How to use recursion on a nested list in order to add/subtract/multiply/divide?
[英]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
時,您需要返回0
obj
是一個list
與int
egers您需要返回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)
這將完美地工作。 上面的某些代碼沒有給出正確的答案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.