递归遍历列表(python)

oo7oh9g9  于 2023-03-07  发布在  Python
关注(0)|答案(4)|浏览(119)

假设我有一个列表x = [1,2,3,4]
有没有一个递归的方法,我可以通过这个列表找到这个值?
我希望最终能够将列表(或嵌套列表)中的返回值与任意数字进行比较,以查看它是否匹配。
我可以用for循环来实现这个功能,但我很难想象用递归方法来实现同样的功能,我知道我不能设置一个计数器来跟踪我在列表中的位置,因为递归调用函数每次都会重置计数器。
我在想,我可以将函数的基本情况设置为number和len 1的列表之间的比较。
我只想得到一些提示。

d5vmydt9

d5vmydt91#

这不是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)
ddrv8njm

ddrv8njm2#

当你有一个链表的时候,递归函数是惯用的。Python列表更像数组。但是仍然可以用递归函数来处理Python列表--没有真实的的实用程序,但是作为一个练习,它会很有趣。
我们从一个完整的列表开始,基本情况是当列表为空时,遍历列表的方法是将列表作为参数传入,使用x.pop()同时获取并移除列表中的第一项,计算弹出项,然后将列表(现在更短)传入同一个函数。
编辑:实际上,经过再三考虑,你最好不要使用x.pop(),而是先查看第一个值,然后把剩余的值传入切片中,这效率非常低,因为每次切片都要复制列表,但这比在递归函数中破坏性地消耗列表要好,除非这是你想要的副作用。

dzhpxtsq

dzhpxtsq3#

你会有两种基本情况:
1)您已经到达列表的末尾=〉return false。
2)当前元素就是你要找的元素=〉return true(或者是你感兴趣的元素或它的位置)。
你必须一直做的事情是检查当前元素的两个基本情况,如果两个基本情况都不适用,则递归地将函数应用于列表中的下一个元素。

bsxbgnwa

bsxbgnwa4#

您可以尝试这种简单的递归解决方案,而无需对列表进行切片。

1.我们检查当前正在迭代的元素是否是<class 'list'>的示例,然后需要再次调用该函数(递归)。
1.否则我们就知道我们得到了某个值,所以在if条件下我们要检查,如果search元素等于那个值,如果它为真,那么就找到了search元素,否则我们就简单地打印我们得到的值。

def find_rec(lst, val):
    for ele in lst:
        if isinstance(ele, list): 
            find_rec(ele, val) #recursive function
        else:
            if ele == val:
                print("Found", val)
            else:
                print(ele)

lst = [[1, [10, 20, 30], 100, 200], [999, 120]]
find_rec(lst, 200)

相关问题