2

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

false
false
false
false
true
false
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
4

3 回答 3

5

我的尝试:

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

    return any(contains(x, target) for x in lst)
于 2013-04-18T18:54:32.227 回答
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
于 2013-04-18T18:48:14.323 回答
0

为@gatto 的解决方案使用鸭子打字

def contains(lst, target):
    try:
        return any(contains(x, target) for x in lst)        
    except TypeError:
        return lst == target
于 2013-04-18T19:10:51.113 回答