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