簡體   English   中英

PYTHON 從遞歸函數返回一個列表

[英]PYTHON Return a list from a recursive function

我正在編寫一個程序,程序的一部分是我想使用遞歸函數創建一個包含字符串中所有子字符串的列表。

但是,當我返回列表時,我什么也沒得到。 變量 substringList 具有 None 值。

如何返回列表而不丟失其中的所有數據?

def main(string):
    substringList = []
    substringList = substring(string, substringList)

def substring(string, substringList):#Recursive function to create all the
    length = len(string)             #substrings**strong text**

    if length == 0:
        return substringList

    else:
        substringList.append(string)
        substring(string[1::], substringList)


string = "bananas"
main(string)

您得到“無”值是因為您忘記使用return命令。 另外,你為什么要編寫一個單獨的包裝函數來調用你的遞歸函數? 你可以在主程序中很容易地做到這一點。 您可以使用=[]在調用配置文件中列出 substringList 的默認值。 新代碼:

def substring(string, substringList=[]):
    # Recursive function to create all the substrings
    #   of the given string

    if len(string) == 0:
        return substringList

    else:
        substringList.append(string)
        substring(string[1:], substringList)
        return substringList

print substring("bananas")

現在,請注意,您還沒有編寫邏輯來獲取所有子字符串:您只獲取了以最后一個字母結尾的子字符串。 您陳述問題的方式,您還需要其他人,例如“nan”、“n”等。我希望這就是您接下來要攻擊的內容。 請注意,您可能需要更多的遞歸:第二次調用查找您從砍掉此列表末尾獲得的信息。 這足以讓你前進嗎?

這就是你要找的嗎?

def main(string):
    substringList = []
    substringList = substring(string, substringList)
    return substringList
def substring(string, substringList):#Recursive function to create all the
    length = len(string)             #substrings**strong text**

    if length == 0:
        return substringList

    else:
        substringList.append(string)
        substring(string[1::], substringList)
        return substringList


string = "bananas"
main(string)

>>>['bananas', 'ananas', 'nanas', 'anas', 'nas', 'as', 's']

上面 Prune 的回答有問題; 然而,我還沒有獲得足夠的積分來發表評論,所以就這樣吧。 如果您運行以下命令,第二次調用的結果將包括與第一次調用連接的第一次調用的結果。 IE

def substring(string, substringList=[]):
    # Recursive function to create all the substrings
    #   of the given string

    if len(string) == 0:
        return substringList

    else:
        substringList.append(string)
        substring(string[1:], substringList)
        return substringList

print (substring("bananas"))
print (substring("two"))

結果是 :

['香蕉','ananas','nanas','anas','nas','as','s'] ['香蕉','ananas','nanas','anas','nas', 'as', 's', 'two', 'wo', 'o']

我認為下面是針對您的問題的更簡單的解決方案,並且還解決了 gordonC 指出的問題。

def substring(stringList):
    # Recursive function to create all the substrings of the given string
    last_str = stringList[-1]
    if len(last_str) == 1:
        return stringList
    else:
        return substring(stringList + [last_str[1:]])


print(substring(["bananas"]))
print(substring(["two"]))
print(substring(["what"]))

輸出是

['bananas', 'ananas', 'nanas', 'anas', 'nas', 'as', 's']
['two', 'wo', 'o']
['what', 'hat', 'at', 't']

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM