让我以简单的方式向您展示,更改代码如下:(### 是我添加到您的代码中的新行,以便您可以看到那里发生的事情)
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
现在让我们制作一个深度为三的列表:
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
在函数中添加更多语句或其他变量并仔细观察它们,最终您会得到它。