首页 > 解决方案 > 如何在 Python 中使用递归拆分字符串?

问题描述

我想问如何创建一个递归函数,该函数为每个字符拆分列表中包含的每个字符串,每次重复该过程时从头删除一个。我也想这样做,但每次都从末尾删除一个字母。例如,如果我有类似的东西:

list=['house','cat','dog']

我应该得到

['house','ouse','use','se','e','cat','at','t','dog','og','g']

['house','hous','hou','ho','h','cat','ca','c','dog','do','d']

我试图这样做,但它不起作用;另外,它应该是递归的......提前谢谢你。

def substring(stringslist):
    final=[]
    for string in stringslist:
        if len(string)==1:
            return final.append(string)
        else:
            return final.append(substring(string[::-1]))

标签: pythonrecursionsplit

解决方案


使用生成器可以实现更直接的实现 - 您只需将结果转换为list().

lst=['house','cat','dog']

def substring(string, reversed=False):
    if string:  # if string is not zero-length:
        yield string  # yield its full length
        yield from substring(string[:-1] if reversed else string[1:])  # and recurse

def substrings(stringslist, reversed=False):
    for string in stringslist:
        yield from substring(string, reversed)
>>> list(substrings(lst))
['house', 'ouse', 'use', 'se', 'e', 'cat', 'at', 't', 'dog', 'og', 'g']
>>> list(substrings(lst, reversed=True))
['house', 'hous', 'ous', 'us', 's', 'cat', 'ca', 'a', 'dog', 'do', 'o']

推荐阅读