我正在尝试编写一个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
答案 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