[英]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.