【发布时间】:2021-08-20 15:16:51
【问题描述】:
我想计算一个列表的深度,所以不是元素的数量,而是一个列表可以具有的最大深度。
这是我的功能:
def max_level(lst):
print(max_level([1, [[[2, 3]]], [[3]]])))
应该返回 4
【问题讨论】:
我想计算一个列表的深度,所以不是元素的数量,而是一个列表可以具有的最大深度。
这是我的功能:
def max_level(lst):
print(max_level([1, [[[2, 3]]], [[3]]])))
应该返回 4
【问题讨论】:
你可以试试:
def max_level(lst):
return isinstance(lst, list) and max(map(max_level, lst)) + 1
print(max_level([1, [[[2, 3]]], [[3]]]))
输出:
4
解释:
list类型:def max_level(lst):
return isinstance(lst, list)
Trues:and max(map(max_level, lst)) + 1
其中max(map(max_level, lst))返回Trues的当前数量,+ 1是再增加一个。
如果可以有空列表,您可以将lst 替换为lst or [0],其中or 将告诉python 如果它不为空,则使用它左侧的列表,否则使用[0] :
def max_level(lst):
return isinstance(lst, list) and max(map(max_level, lst or [0])) + 1
print(max_level([1, [], [[]]]))
输出:
3
针对@cdlane 的评论,如果您不想将布尔值与整数值混合,您可以在isinstance() 调用中添加int() 包装器:
def max_level(lst):
return int(isinstance(lst, list)) and max(map(max_level, lst or [0])) + 1
【讨论】:
我也想搜索一个空列表
试试这个:
def max_level(thing):
return 1 + (max(map(max_level, thing)) if thing else 0) if isinstance(thing, list) else 0
我重新设计了@AnnZen 的初始解决方案,添加了对空列表的额外检查,并且不混合布尔值和整数。
【讨论】:
int() 包装器将消除混合布尔值和整数 :)