我正在编写程序,程序的一部分是我想使用递归函数创建一个包含字符串中所有子字符串的列表。
但是,当我返回列表时,我什么都没得到。变量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)
答案 0 :(得分:2)
这是你在找什么?
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']
答案 1 :(得分:1)
你得到了#34;没有"值因为您忘记使用返回命令。另外,为什么要编写一个单独的包装函数来调用递归函数?您可以在主程序中轻松完成。您可以使用 = [] 列出调用配置文件中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"等。我希望你的攻击是什么下一个。请注意,您可能需要更多递归:第二次调用可以找到您从此列表的 end 中删除的内容。这足以让你前进吗?
答案 2 :(得分:0)
上面的梅子答案有问题;但是,我还没有赚到足够的积分可以发表评论,因此请继续。如果运行以下命令,则第二个呼叫的结果将包括与第一个呼叫串联的第一个呼叫的结果。即
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”] [“香蕉”,“安娜”,“纳那”,“安娜”,“ nas”,“ as”,“ s”,“两个”,“ wo”,“ o”]