我正在尝试编写一个递归函数,如果元素在嵌套列表中,则返回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.
我肯定在这里遗漏了一些东西,我似乎无法说出来,我感谢所有的帮助!
答案 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