我試圖分割一個字符串作爲分割部分使用「/」作爲分隔符並傳遞到一個元組。例如:「E:/ John/2012/practice/question11」應該是('E:','John','2012','practice','question11')。Python分割路徑遞歸地
所以我已經把除了「/」以外的每個字符都傳遞給了一個元組,但它並不是我想要的例子中顯示的子部分聯合。這是作業中的一個練習問題,並且希望能夠幫助我學習遞歸。
謝謝你這麼多
我試圖分割一個字符串作爲分割部分使用「/」作爲分隔符並傳遞到一個元組。例如:「E:/ John/2012/practice/question11」應該是('E:','John','2012','practice','question11')。Python分割路徑遞歸地
所以我已經把除了「/」以外的每個字符都傳遞給了一個元組,但它並不是我想要的例子中顯示的子部分聯合。這是作業中的一個練習問題,並且希望能夠幫助我學習遞歸。
謝謝你這麼多
像這樣的事情
>>> 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,)
你的錯誤是不是在遞歸,而是你在做串聯遞歸的結果是什麼。假設您已達到('E:', 'John', '2012', 'prac')
,並且下一個字符是't'
;您不希望將't'
附加到遞歸結果中,您希望將其附加到遞歸結果的最後字。同樣,當您到達分隔符時,您想要將新單詞初始化爲空。
當你進行遞歸時,你將(幾乎)總是有兩種情況:一種是遞歸式的,另一種是終端式的。終端之一通常很容易,而且你做得很對(如果沒有字符串,就沒有字)。但是我發現如果你有一個遞歸的例子,在上面的中間計算的某個特定的例子中,可以非常有效地找出需要發生的事情。
你能舉個例子嗎?我不明白你如何遞歸地將它添加到最後的單詞。 – user1757703
我不想爲你解決功課,你仍然應該爲它工作。但是你可以用'path = last_path [: - 1] +(last_path [-1] + s [0],)''將一個字母追加到元組的最後一個元素。 – Amadan
該解決方案更好,因爲它與操作系統無關,並且不會假定是使用正斜槓還是反斜槓。 – DaveP
這對於以'/'開頭的路徑不起作用。 – asmeurer
這在Linux中不起作用,因爲「休息」最終會變成「/」。不幸的是,我還沒有足夠的聲望來投票,因此這個評論。 :( 我使用這個現: ' DEF rec_split(路徑): 元素= [] 而((路徑= '/')和(路徑= '')!): 路徑,尾= os.path.split(path) elements.insert(0,tail) 返回元素 ' –