【问题标题】:Implementing Python's split() function using purely recursion使用纯递归实现 Python 的 split() 函数
【发布时间】:2022-01-17 00:48:33
【问题描述】:

我正在尝试使用没有附加参数和循环的递归来实现 Python 的 split() 函数。

对于给定的输入字符串,这是所需的输出

mySplit('hello,there,world', ',')
=> ['hello', 'there', 'world']

这是我目前的尝试,但它实际上只删除了分隔符并将字符串放在列表中,但我不知道如何将项目附加到列表中!

def mySplit(string, delim):
    if len(string) == 1:
        return [string]

    if string[0] == delim:
        return [mySplit(string[1:], delim)[0]]

    return [string[0] + mySplit(string[1:], delim)[0]]

此代码导致['hellothereworld']

【问题讨论】:

  • 很好,我错过了一个限制。也不允许使用辅助函数!

标签: python string list recursion


【解决方案1】:

我会这样写:

def my_split(s, delim):
    for i, c in enumerate(s):
        if c == delim:
            return [s[:i]] + my_split(s[i + 1 :], delim)

    return [s]

编辑:糟糕,跳过了您问题的关键部分。我认为这行得通。

def my_split(s, delim, i=0):
    if i == len(s):
        return [s]

    elif s[i] == delim:
        return [s[:i]] + my_split(s[i + 1 :], delim)

    return my_split(s, delim, i + 1)

编辑 2: 这肯定是一个棘手的问题。真是有趣的问题。希望我不会再遇到任何限制:

def my_split(s, delim):
    if not s:
        return [""]

    elif s[0] == delim:
        a = my_split(s[1:], delim)
        return "", *a

    b, *rest = my_split(s[1:], delim)
    return [s[0] + b] + rest


assert my_split("hello,there,world", ",") == ["hello", "there", "world"]
assert my_split("hello world!", ",") == ["hello world!"]
assert my_split("hello world!", " ") == ["hello", "world!"]

【讨论】:

    【解决方案2】:
    def mySplit(string, delim):
        if string.count(delim) == 0:
            return [string]
        idx = string.index(delim)
        return [string[:idx]] + mySplit(string[idx + 1:], delim)
    
    
    print(mySplit('hello,there,world', ','))
    

    【讨论】:

    • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
    最近更新 更多