我正在尝试将作为字符串给出的路径拆分为子部分,使用“/”作为分隔符递归并传递给元组。例如:“E:/ John / 2012 / practice / question11”应该是('E:','John','2012','practice','question11')。
所以我将除了“/”之外的每个字符都传递给了一个元组,但这并不是我想要的例子中显示的子部分联合。这是家庭作业中的一个练习题,在我试图学习递归时会很感激帮助。
非常感谢你
答案 0 :(得分:11)
像这样的东西
>>> import os
>>> s = "E:/John/2012/practice/question11"
>>> os.path.split(s)
('E:/John/2012/practice', 'question11')
注意os.path.split()
不会将整个路径拆分为str.split()
>>> def rec_split(s):
... rest, tail = os.path.split(s)
... if rest == '':
... return tail,
... return rec_split(rest) + (tail,)
...
>>> rec_split(s)
('E:', 'John', '2012', 'practice', 'question11')
编辑:虽然问题是关于Windows路径。对于unix / linux路径,包括那些以“/”
开头的路径,很容易修改它>>> def rec_split(s):
... rest, tail = os.path.split(s)
... if rest in ('', os.path.sep):
... return tail,
... return rec_split(rest) + (tail,)
答案 1 :(得分:1)
您的错误不在递归中,而是您在连接递归结果时所做的工作。假设您已到达('E:', 'John', '2012', 'prac')
,下一个字符为't'
;您不希望将't'
附加到递归结果,您希望将其附加到递归结果的最后字。同样,当您到达分隔符时,您希望将新单词初始化为空。
当你进行递归时,你会(几乎)总是有两种情况:一种是递归的,一种是终端的。终端通常很容易,你做得对(如果没有字符串,就没有字)。但是我发现,如果你试图在上面计算中间某个递归情况的具体例子中找出确切需要发生的事情,那将会非常有帮助。