说我有一个列表x = [1,2,3,4]
是否有递归方法,我可以通过列表查找值?
我希望最终能够将列表中的返回值(或嵌套列表)与任意数字进行比较,看它是否匹配。
我可以想办法使用for循环来做到这一点,但是我很难想象一个递归方法来做同样的事情。我知道我不能设置一个计数器来跟踪我在列表中的位置,因为递归调用该函数只会每次重置计数器。
我在想我可以将函数的基本情况设置为数字和len 1列表之间的比较。
我只是想要一些提示。
答案 0 :(得分:2)
这是不在Python中做事的方式,但肯定 - 你可以递归地遍历列表列表:
def findList(lst, ele):
if not lst: # base case: the list is empty
return False
elif lst[0] == ele: # check if current element is the one we're looking
return True
elif not isinstance(lst[0], list): # if current element is not a list
return findList(lst[1:], ele)
else: # if current element is a list
return findList(lst[0], ele) or findList(lst[1:], ele)
答案 1 :(得分:0)
当您有链接列表时,递归函数是惯用的。 Python列表更像是数组。但是仍然可以使用递归函数处理Python列表 - 没有实际效用,但作为练习它可能很有趣。
您从完整列表开始,基本情况是列表为空时。通过将列表作为参数传递来遍历列表,使用x.pop()
同时获取并删除列表中的第一个项目,评估弹出的项目,然后将列表(现在更短)传递到同一个函数中。 / p>
编辑:实际上,在第二个想法中,你最好不要使用x.pop(),而是先查看第一个值,然后在片中传递余数。这样效率非常低,因为每次切片时都会复制列表,但这比破坏性地使用递归函数中的列表更好,除非这是一个理想的副作用。
答案 2 :(得分:0)
那么你将有两个基本案例:
1)您已到达列表的末尾=>返回false。
2)您当前的元素是您要查找的元素=>返回true(或元素或其位置,无论你感兴趣)。
你必须要做的就是检查当前元素的两个基本情况,如果两个基本情况都没有应用,则递归地对列表中的下一个元素应用函数。