Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用递归Python 3查找字符串中的所有子字符串_Python_Recursion - Fatal编程技术网

使用递归Python 3查找字符串中的所有子字符串

使用递归Python 3查找字符串中的所有子字符串,python,recursion,Python,Recursion,如何使用递归列出字符串中所有可能的子字符串?(无循环)我知道可以使用s[1:]来切断第一个位置,使用s[:-1]来切断最后一个位置。到目前为止,我已经得出了以下结论: def lst_substrings(s): lst = [] if s == "": return lst else: lst.append(s) return lst_substrings(s[1:]) 但这只会列出按第一个位置分割的所有子字符串,如果它有效的话,这是一个有趣的问题,下面是

如何使用递归列出字符串中所有可能的子字符串?(无循环)我知道可以使用s[1:]来切断第一个位置,使用s[:-1]来切断最后一个位置。到目前为止,我已经得出了以下结论:

def lst_substrings(s):
  lst = []
  if s == "":
    return lst
  else:
    lst.append(s)
    return lst_substrings(s[1:])

但这只会列出按第一个位置分割的所有子字符串,如果它有效的话,这是一个有趣的问题,下面是我的解决方案-感谢反馈

输出 解决方案
编辑:嗯。现在我才意识到,几乎相同的解决方案已经被一个比我更快的人发布了。投票赞成他的答案。我将把它保留下来,因为它更简洁,以防您想按子字符串长度对结果列表进行排序。使用len(item,item),即保留-符号,以升序排序

这将有助于:

def lst_substrings(s):
    lst = [s]
    if len(s) > 0:
        lst.extend(lst_substrings(s[1:]))
        lst.extend(lst_substrings(s[:-1]))
    return list(set(lst))

sub = lst_substrings("boby")
sub.sort(key=lambda item: (-len(item), item))
print(sub)
输出为:

['boby', 'bob', 'oby', 'bo', 'by', 'ob', 'b', 'o', 'y', '']

你想做什么不太清楚…你想做什么?你有什么例子吗?提示:递归经常使用当前调用中的内容(
lst
),并将其与使用较少初始输入的递归调用相结合(
lst\u子字符串(s[1:])
)。在这种情况下,您似乎缺少将当前调用中的内容与递归调用的结果相结合的部分;在尝试添加更多功能之前,也许您应该调试它并尝试了解当前发生的情况。对于字符串“apbple”,您的函数永远不会输出apple,因为您只在开头或结尾进行剪切end@Soyol“apple”不是“apbple”的子字符串。然而,这是一个后续步骤。
def lst_substrings(s):
    lst = [s]
    if len(s) > 0:
        lst.extend(lst_substrings(s[1:]))
        lst.extend(lst_substrings(s[:-1]))
    return list(set(lst))

sub = lst_substrings("boby")
sub.sort(key=lambda item: (-len(item), item))
print(sub)
['boby', 'bob', 'oby', 'bo', 'by', 'ob', 'b', 'o', 'y', '']