在Python中以嵌套列表递归查找元素

时间:2018-01-14 21:17:27

标签: python-3.x recursion

我试图编写一个函数,它将一个列表和一个元素作为输入并返回它的深度。如果找不到该元素,则返回-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,但这显然不起作用。

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