繁体   English   中英

递归遍历列表(python)

[英]Recursively going through a list (python)

说我有一个清单x = [1,2,3,4]

有一个递归方法,我可以通过列表找到值?

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

我可以想办法使用for循环来做到这一点,但是我很难想象一个递归方法来做同样的事情。 我知道我不能设置一个计数器来跟踪我在列表中的位置,因为递归调用该函数只会每次重置计数器。

我想我可以将函数的基本情况设置为数字和len 1列表之间的比较。

我真的想要一些提示。

不是用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)

当您有链表时,递归函数是惯用的。 Python列表更像是数组。 但是仍然可以使用递归函数来处理Python列表 - 没有真正的实用程序,但它可以作为练习很有趣。

你从一个完整的列表开始,你的基本情况是列表为空。 通过将列表作为参数传递来遍历列表,使用x.pop()同时获取并删除列表中的第一个项目,评估弹出的项目,然后将列表(现在更短)传递到同一个函数中。

编辑:实际上,在第二个想法,你最好不要使用x.pop(),而是偷看第一个值,并在片中传递余数。 这将是非常低效的,因为您每次切片时都会复制列表,但它比破坏性地消耗递归函数中的列表更好,除非这是一个期望的副作用。

那么你将有两个基本情况:

1)您已到达列表的末尾=>返回false。

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

你必须要做的就是检查当前元素上的两个基本情况,并且如果两个基本情况都没有应用,则递归地将这个函数应用于列表中的下一个元素。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM