Python递归,为什么我的函数不起作用?

时间:2013-04-18 18:45:18

标签: python python-3.x

我正在尝试编写一个Python 3递归函数,它将告诉我整数是否在嵌套列表中。我不确定如果代码在列表中找到它,我将如何使代码返回True,如果在代码列表中找不到它,则False。当我打印for循环的结果时,我得到了一堆

false
false
false
false
true
false
false
false

等。但是,它返回False,因为最后一次调用是假的,即使我希望它返回true。我该如何解决这个问题?

这是我的代码:

def nestedListContains(NL, target):    
    if( isinstance(NL, int) ):
        return NL    

    for i in range(0, len(NL)):
       return ( nestedListContains(NL[i], target) == target )

    return False

这就是我如何称呼它

print(nestedListContains([[3], [4,5,7], [[[8]]]], 8))
编辑:这似乎对我有用,但似乎相当贫穷:

def nestedListContains(NL, target):    
    if( isinstance(NL, int) ):
        if( NL == target ):
            return 1
        return 0

    x = 0

    for n in NL:
        x += nestedListContains(n, target) == 1        

    return x != 0

3 个答案:

答案 0 :(得分:5)

我的尝试:

def contains(lst, target):
    if isinstance(lst, int):
        return lst == target

    return any(contains(x, target) for x in lst)

答案 1 :(得分:4)

return的结果无论是True还是def nestedListContains(NL, target): if isinstance(NL, int): return NL == target for n in NL: result = nestedListContains(n, target) if result: return result return False 。你可以这样做:

{{1}}

答案 2 :(得分:0)

为@ gatto的解决方案使用duck typing

def contains(lst, target):
    try:
        return any(contains(x, target) for x in lst)        
    except TypeError:
        return lst == target