如何计算列表列表的深度?

How can I count the depth in a list of lists?

我想计算列表列表的深度,所以不是元素的数量而是一个列表可以具有的最大深度。

这是我的功能:

def max_level(lst):

print(max_level([1, [[[2, 3]]], [[3]]])))

应该return4

你可以试试:

def max_level(lst):
    return isinstance(lst, list) and max(map(max_level, lst)) + 1

print(max_level([1, [[[2, 3]]], [[3]]]))

输出:

4

解释:

  1. 首先检查传递给递归函数的对象是否属于list类型:
def max_level(lst):
    return isinstance(lst, list)
  1. 如果是,继续将列表中的 True 加起来:
and max(map(max_level, lst)) + 1

其中max(map(max_level, lst))returns当前数量Trues,+ 1是加1。


如果可以有空列表,你可以用lst or [0]替换lst,其中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

I want to search through a list that is empty as well

试一试:

def max_level(thing):
    return 1 + (max(map(max_level, thing)) if thing else 0) if isinstance(thing, list) else 0

我修改了@AnnZen 的初始解决方案以添加对空列表的额外检查并且不混合布尔值和整数。