PYTHON从递归函数返回一个列表

PYTHON从递归函数返回一个列表,python,Python,我正在编写一个程序,程序的一部分是我想用递归函数创建一个包含字符串中所有子字符串的列表 然而,当我返回列表时,我什么也没有得到。变量substringList没有值 如何在不丢失列表中所有数据的情况下返回列表 def main(string): substringList = [] substringList = substring(string, substringList) def substring(string, substringList):#Recursive fu

我正在编写一个程序,程序的一部分是我想用递归函数创建一个包含字符串中所有子字符串的列表

然而,当我返回列表时,我什么也没有得到。变量substringList没有值

如何在不丢失列表中所有数据的情况下返回列表

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)

这就是你要找的吗

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']

您没有得到任何值,因为您忘记使用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 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"))
结果:

['pananas'、'ananas'、'nanas'、'anas'、'nas'、'as'、's']
[‘香蕉’、‘ananas’、‘nanas’、‘anas’、‘nas’、‘as’、‘s’、‘two’、‘wo’、‘o’]。

能否显示您期望的输出?请澄清您的问题。按照我的理解,下面的答案不起作用,因为它只返回以最后一个字母结尾的子字符串——当然,这是您原始代码的逻辑。这是否回答了您的问题?是的,非常感谢!我现在明白我的错误了,正如其他人在评论中所说,我只返回带有最后一个字母的子字符串。我必须把它们全部归还。@Aggonachiles不客气,欢迎你来。如果你发现一个答案有用,就投票表决吧。一定要接受最好的答案。这是我们在这里说谢谢的一部分。我推荐Prune的答案作为最佳注释:这种方法ab使用了Python在函数定义时只计算命名参数的默认值这一事实,这就是为什么substringList不会在后续递归调用中被覆盖,并且可以在调用堆栈中共享。