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)
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)
4条答案
按热度按时间d5vmydt91#
这不是Python的工作方式,但可以肯定的是,你可以递归地遍历一个列表的列表:
ddrv8njm2#
当你有一个链表的时候,递归函数是惯用的。Python列表更像数组。但是仍然可以用递归函数来处理Python列表--没有真实的的实用程序,但是作为一个练习,它会很有趣。
我们从一个完整的列表开始,基本情况是当列表为空时,遍历列表的方法是将列表作为参数传入,使用
x.pop()
同时获取并移除列表中的第一项,计算弹出项,然后将列表(现在更短)传入同一个函数。编辑:实际上,经过再三考虑,你最好不要使用x.pop(),而是先查看第一个值,然后把剩余的值传入切片中,这效率非常低,因为每次切片都要复制列表,但这比在递归函数中破坏性地消耗列表要好,除非这是你想要的副作用。
dzhpxtsq3#
你会有两种基本情况:
1)您已经到达列表的末尾=〉return false。
2)当前元素就是你要找的元素=〉return true(或者是你感兴趣的元素或它的位置)。
你必须一直做的事情是检查当前元素的两个基本情况,如果两个基本情况都不适用,则递归地将函数应用于列表中的下一个元素。
bsxbgnwa4#
您可以尝试这种简单的递归解决方案,而无需对列表进行切片。
1.我们检查当前正在迭代的元素是否是
<class 'list'>
的示例,然后需要再次调用该函数(递归)。1.否则我们就知道我们得到了某个值,所以在if条件下我们要检查,如果search元素等于那个值,如果它为真,那么就找到了search元素,否则我们就简单地打印我们得到的值。