Позвольте мне показать вам простой способ, изменить код так: (### являются новые строки, я добавил в свой код, чтобы вы могли посмотреть, что там происходит)
def depth(L) :
nesting = []
for c in L:
if type(c) == type(nesting) :
print 'nesting before append', nesting ###
nesting.append(depth(c))
print 'nesting after append', nesting ###
if len(nesting) > 0:
return 1 + max(nesting)
return 1
Теперь давайте составить список с глубиной 3:
l=[[1,2,3],[1,2,[4]],'asdfg']
Вы можете увидеть наш список из 3 элементов. один из них - это список, другой - список, в котором есть другой список, а последний - строка. Вы можете ясно видеть глубину этого списка 3 (то есть 2 списка вложенных вместе во втором элементе основного списка)
Позволяет запустить этот код:
>>> depth(l)
nesting before append []
nesting after append [1]
nesting before append [1]
nesting before append []
nesting after append [1]
nesting after append [1, 2]
3
Кусок торта! эта функция добавляет 1 к вложенности. то, если в элементе есть еще один список, он добавляет 1 + максимальное число в гнездовании, которое называется числом времени. и если элемент является строкой, он пропускает его.
В конце он возвращает максимальное число в гнездовании, которое является максимальным числом повторений рекурсии, которое является числом времени, когда в главном списке есть список внутри списка, а также глубина. В нашем случае рекурсия произошла дважды для второго элемента + 1 = 3, как мы и ожидали.
Если у вас все еще есть проблемы с его получением, попробуйте добавить к функции дополнительные print
заявления или другие переменные и внимательно их посмотреть, и в конце концов вы ее получите.
Лучше использовать 'type (L)' вместо 'type (nesting)'. Тогда функция также может иметь дело, например, с вложенными кортежами. –