【问题标题】:Trying to split file path into a tuple using recursion尝试使用递归将文件路径拆分为元组
【发布时间】:2015-02-25 23:18:04
【问题描述】:

我正在尝试进行递归练习,但遇到了一个问题。我需要拆分一个 文件地址到一个元组中,我最终在一个元组中得到一个元组。 下面是我想出的,当我测试它时,它会返回:

输入路径:C:/Users:/Games

('C:', ('Users:', 'Games'))

我想要:('C:','Users:','Games')

def split_path(s):
    path = ()

        if s.find("/") == -1:
        path= (s)
    else:
        location = s.find("/")
        path += (s[:location],)
        path += (split_path(s[location+1:]),)
return path

【问题讨论】:

    标签: python recursion tuples


    【解决方案1】:

    您可能希望将靠近函数最后一行的行更改为以下行:

    path.extend(split_path(s[location+1:]))
    

    顺便说一句,你为什么不使用类似的东西:

    path = s.split('/')
    

    【讨论】:

    • 这适用于列表,但不适用于元组。元组没有extend 方法。
    • 是的,现在我意识到问题是关于tuple。在这种情况下,我可能会修改函数以返回一个列表,并最终转换为元组。
    • 我尝试按照您的建议作为列表进行操作,但最后一个扩展名被字母拆分,因此在我的示例中,尝试拆分后将是:['C:','用户:'、'g'、'a'、'm'、'e'、's']
    • 例如在 Python 控制台中输入:string = '''C:/Users:/Games''';string.split('/')
    【解决方案2】:

    你真的很亲密。仔细看看你的最后一行:

    path += (split_path(s[location+1:]),)
    

    您将函数的返回值(一个元组)放入另一个元组中。

    编辑添加:我刚刚注意到一个非常微妙的错误,可能导致您将返回值放入元组中:

    path = (s)
    

    应该是

    path = (s,)
    

    我会这样写:

    def split_path(s):
        index = s.find('/')
        if index == -1:
            return (s,)
        else:
            return (s[:index],) + split_path(s[index+1:])
    

    【讨论】:

      猜你喜欢
      • 2020-11-09
      • 2021-08-21
      • 1970-01-01
      • 1970-01-01
      • 2020-08-04
      • 2017-08-11
      • 2012-02-17
      • 2015-12-20
      • 2012-06-17
      相关资源
      最近更新 更多