在python中不使用循环使用递归拆分字符串

2024-04-23 12:15:50 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我试图解决这个问题,它要求我拆分一个字符串,并返回一个拆分字符串的元组,这应该是通过递归完成的,绝对不使用循环。 这是我设法想出的函数:

def split_path(s):
    tup=[]

    i=s.find("/")
    if i!=-1:
        tup.append(s[0:i])
        new_str=s[i+1:]
        tup.append(split_path(new_str))


    else:
        tup.append(s)
    return tup

“E:/cp104/2005/labs/lab11t4”是我放入函数中的字符串,输出应该是:

^{pr2}$

但这就是我所拥有的:

['E:', ['cp104', ['2005', ['labs', ['lab11t4']]]]]

所以现在我成功地得到了我需要的字符串中的所有值,我知道问题是我返回了一个元组,所以它只是在一个元组中附加一个元组,所以我的外部元组中只有2个元素。在

那么,我该如何解开内部元素,使最后的元组变成一维元组,而不是现有的5维元组呢?在


Tags: path函数字符串元素newdefsplit元组
3条回答

您可以使用extend代替append

tup.extend(split_path(new_str))

对于给定程序的最小修复,现有答案是正确的。然而,给定的程序不是很好的递归形式。像这样在内存中显式地构建结果是一种更迭代的习惯用法。在

下面是一个替代版本,它更像是递归样式:

def split_rec(path):
    i = path.find('/')
    if i == -1:
        return (path,)
    else:
        return (path[:i],) + split_rec(path[i+1:])

这还返回一个实际的元组,如在问题的文本中,而不是在代码中的列表中。要使其返回一个列表,请将(something,)替换为[something]两次。在

执行递归时,将append更改为{}。由于返回了一个列表,所以需要扩展当前列表,而不是附加另一个内部列表。在

def split_path(s):
    tup=[]
    i=s.find("/")
    if i!=-1:
        tup.append(s[0:i])
        new_str=s[i+1:]
        tup.extend(split_path(new_str))
    else:
        tup.append(s)
    return tup

split_path("E:/cp104/2005/labs/lab11t4")
['E:', 'cp104', '2005', 'labs', 'lab11t4']

相关问题 更多 >