簡體   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