Search code examples
pythonlistdepth

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


I want to count the depth in a list of lists, so not the amount of elements but the maximum depth one list can have.

This is my function:

def max_level(lst):

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

should return 4


Solution

  • You can try:

    def max_level(lst):
        return isinstance(lst, list) and max(map(max_level, lst)) + 1
    
    print(max_level([1, [[[2, 3]]], [[3]]]))
    

    Output:

    4
    

    Explanation:

    1. First check if object passed into the recursive function is of type list:
    def max_level(lst):
        return isinstance(lst, list)
    
    1. If so, proceed to add up the Trues in the list:
    and max(map(max_level, lst)) + 1
    

    where the max(map(max_level, lst)) returns the current amount of Trues, and the + 1 is to add one more.


    If there can be empty lists, you can replace lst with lst or [0], where the or will tell python to use the list on the left side of it if its not empty, else use the [0]:

    def max_level(lst):
        return isinstance(lst, list) and max(map(max_level, lst or [0])) + 1
    
    print(max_level([1, [], [[]]]))
    

    Output:

    3
    

    Addressing @cdlane's comment, if you don't want to mix boolean values with integer values, you can add an int() wrapper to the isinstance() call:

    def max_level(lst):
        return int(isinstance(lst, list)) and max(map(max_level, lst or [0])) + 1