递归地遍历列表(python)

2024-05-17 10:17:29 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有一个列表x=[1,2,3,4]

有没有递归方法,我可以在列表中查找值?

我希望最终能够将列表(或嵌套列表)中的返回值与任意数字进行比较,以查看它是否匹配。

我可以用for循环想出一种方法来实现这一点,但是我很难想象递归方法也能做到这一点。我知道我不能设置计数器来跟踪我在列表中的位置,因为递归调用函数每次都会重置计数器。

我想我可以设置函数的基本大小写,作为数字和len 1列表之间的比较。

我只是想要一些提示。


Tags: 方法函数列表forlen计数器数字重置
3条回答

这不是用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)您已到达列表的末尾=>;返回false。

2)当前元素是您要查找的元素=>;返回true(或元素或其位置,无论您感兴趣的是什么)。

您必须一直做的事情是检查当前元素上的两个基本情况,并在列表中的下一个元素上递归地应用该函数(如果没有应用任何一个基本情况)。

递归函数是当你有一个链表时惯用的方法。Python列表更像数组。但是仍然可以用递归函数处理Python列表——虽然没有真正的实用程序,但是作为一个练习,它可能会很有趣。

从一个完整的列表开始,基本情况是当列表为空时。遍历列表,方法是将列表作为参数传入,使用x.pop()同时获取和移除列表中的第一个项,计算弹出的项,然后将列表(现在更短)传递到同一个函数中。

编辑:事实上,仔细想想,最好不要使用x.pop(),而是先查看第一个值,然后将剩余的部分传递到一个切片中。这将非常低效,因为每次切片时都要复制列表,但这比在递归函数中破坏性地使用列表要好,除非这是所需的副作用。

相关问题 更多 >