使用递归Python 3查找字符串中的所有子字符串
如何使用递归列出字符串中所有可能的子字符串?(无循环)我知道可以使用s[1:]来切断第一个位置,使用s[:-1]来切断最后一个位置。到目前为止,我已经得出了以下结论:使用递归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:]) 但这只会列出按第一个位置分割的所有子字符串,如果它有效的话,这是一个有趣的问题,下面是
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', '']