Mat*_*son 1 python recursion search list
我必须编写一个递归函数来搜索特定值的列表。该函数应该查找该数字是否在列表中,如果是,它将返回该值的列表索引。
例如:
search([1,2,3,4,5],3)
Run Code Online (Sandbox Code Playgroud)
应该返回:
2
Run Code Online (Sandbox Code Playgroud)
因为 3 出现在列表索引 2 中。
现在我有:
def search(myList, number):
if myList[0] == number:
return myList[0]
return search(myList[1:], number)
Run Code Online (Sandbox Code Playgroud)
并且它一直为我之前的同一个函数调用返回 3。任何帮助将不胜感激。
您当前的代码中有 2 个错误,您返回的是数字本身,而不是它的索引,并且您并没有真正将递增的索引传回。所以,改为这样做:
>>> def search(myList, number):
... if myList[0] == number:
... return 0
... return 1 + search(myList[1:], number)
...
>>> search([1,2,3,4,5],3)
2
Run Code Online (Sandbox Code Playgroud)
现在如果我们有列表中的数字就可以工作,但如果没有,我们将得到一个索引错误。
>>> search([1,2,3,4,5],6)
IndexError: list index out of range
Run Code Online (Sandbox Code Playgroud)
因此,我们应该将函数包装在 try-except 块中
def search(myList, number):
def search_recursive(lst, num):
if lst[0] == num:
return 0
return 1 + search_recursive(lst[1:], num)
try: return search_recursive(myList, number)
except IndexError: return -1
Run Code Online (Sandbox Code Playgroud)
现在,它将起作用
>>> search([1,2,3,4,5],6)
-1
>>> search([1,2,3,4,5],5)
4
Run Code Online (Sandbox Code Playgroud)
但是,仅当您想递归执行此操作时才应使用上述内容,并注意,当您执行此操作时list[1:],您会执行列表切片,每次都会创建一个新列表。
因此,如果允许不使用递归执行此操作,请使用内置list.index方法:
>>> def search(my_list, number):
... try: return my_list.index(number)
... except ValueError: return -1
...
>>> search([1,2,3,4,5],5)
4
>>> search([1,2,3,4,5],6)
-1
Run Code Online (Sandbox Code Playgroud)