我试图编写一个函数,它将一个列表和一个元素作为输入并返回它的深度。如果找不到该元素,则返回-1
def find_e(l, e):
for i in l:
if isinstance(i, list):
return find_e(i, e) + 1
if i == e:
return 1
else:
return -1
输入
[[1, 9], 0, [[[["a"]]]]], "a"
[[1, 9], 0, [[[["a"]]]]], "b"
它应该返回5和-1,但这显然不起作用。
答案 0 :(得分:2)
这失败是因为:
您不检查递归调用是否返回-1。在这种情况下,你应该再次返回-1,而不是添加1。
在完成循环的所有次迭代后,你应该只返回-1,因为之后可能还会有匹配。实际上,在您的代码中,循环总是在第一次迭代中退出。
更正版本:
def find_e(l, e):
for i in l:
if isinstance(i, list):
res = find_e(i, e)
if res >= 0:
return res + 1
if i == e:
return 1
return -1