如何使用递归在嵌套列表中查找元素?

时间:2017-02-24 03:35:17

标签: python python-3.x recursion

我正在尝试编写一个递归函数,如果元素在嵌套列表中,则返回True,否则返回False。到目前为止,我的代码仅适用于某些元素:

def inthere(ls, s):
    if s in ls:
        return True
    else:
        for thing in ls:
            if isinstance(thing, list): 
                return inthere(thing,s)

当我跑步时:

A=[[2,4],[6,[[[8],10]],12],14,16]
print(inthere(A,12)) #Should return True, but does not.
print(inthere(A,2)) #Returns True, as it should.

我肯定在这里遗漏了一些东西,我似乎无法说出来,我感谢所有的帮助!

2 个答案:

答案 0 :(得分:4)

return inthere(thing,s)

应该是:

if inthere(thing,s):
    return True

然后在函数的最后放一个return False。现在不能正常工作的原因是,如果它找不到它找到的第一个嵌套列表中的东西,它就不会检查任何其他列表。

答案 1 :(得分:1)

你可以打印thing然后就知道原因了:

def inthere(ls, s):
if s in ls:
    return True
else:
    for thing in ls:
        print thing
        if isinstance(thing, list):
            return inthere(thing,s)

结果:

[2, 4]
2
4
None
[2, 4]
True

是的,你停止了循环,因为你在ls的第一个元素处返回了这个函数。你只需检查整个列表和list的第一个元素。你可以:

if inthere(thing, s):
    return True