2015-10-21 28 views
3

是否有一種替代方法來顛倒python中的列表使用遞歸?這裏是我的代碼:使用遞歸在python中反轉列表?

revList=[] 
def reverseList(listXS): 
    if(len(listXS)==1): 
     revList.append(listXS[0]) 
    else: 
     current= listXS.pop() 
     revList.append(current) 
     reverseList(listXS) 
    return revList 

testList= ["mouse","dog","cat"] 
print(testList) 
print(reverseList(testList)) 
+1

你的意思是有遞歸替代(是的,你可以使用迭代),還是有一個替代實現仍然使用遞歸(也是)?你當前的代碼是否存在一些問題(除了全局範圍的'revList'會給你...下一個列表上有趣的結果你反向)? – jonrsharpe

+1

@jonrsharpe我想他想知道是否有一個使用遞歸算法的替代實現。 – jlnabais

+0

@jlnabais似乎沒有什麼意思在猜測! – jonrsharpe

回答

1

如果你想要一個替代遞歸方法:

def reverseList(listXS): 
    return [] if not listXS else [listXS.pop()] + reverseList(listXS) 

或者切片:

def reverseList(listXS): 
    return [] if not listXS else listXS[-1:] + reverseList(listXS[:-1]) 

如果你想就地解決方案:

def reverseList(listXS, i=1): 
    if i == len(listXS) - 1: 
     return 
    listXS[i-1], listXS[-i] = listXS[-i], listXS[i-1] 
    reverseList(listXS, i+1) 

扭轉了最初的名單:

In [22]: l = [1, 2, 3, 4,5] 
In [23]: reverseList(l)  
In [24]: l 
Out[24]: [5, 4, 3, 2, 1]  
In [25]: l = [1, 2, 3, 4]  
In [26]: reverseList(l)  
In [27]: l 
Out[27]: [4, 3, 2, 1] 
+1

你的答案就是我正在尋找的!非常感謝你 !!! –

+0

@MichaelAndréSlimz,不用擔心,不客氣。 –

0

如果你想使用遞歸,你可以不喜歡這樣,但它基本上是實現一個for循環不同的方式

def rev(x,y=None): 
    if y is None: 
     y = [] 
    y.append(x.pop()) 
    if x: 
     y = rev(x,y) 
    return y 

print rev([1,2,3,4,5],[]) 

[5, 4, 3, 2, 1] 
+0

這通常是用'y = None'實現,然後'如果y是None:y = []'在函數內部,所以你不必明確地傳遞一個空列表。 – jonrsharpe

+0

@jonrsharpe好點。固定 – SirParselot

0
def rev_list(l): 
    if not l: 
     return [] 
    else: 
     return l[-1:] + rev_list(l[:-1]) 

print(rev_list([1,2,3,4,5])) 

[5, 4, 3, 2, 1] 
+1

這和我自己的答案完全一樣,在你之前發佈很久,你有習慣複製答案 –

+1

@PadraicCunningham我沒有應對的習慣。在我發佈之前,我甚至沒有看到其他人對OP問題的回答。這是一個簡單的遞歸,沒有發明,它就像乘法表一樣。所以當你增加數字時,人們會偷竊你?你的指責很荒謬。 – LetzerWille

1

a function此:

>>> [1,2,3,4,5].reverse() 
[5,4,3,2,1] 
-1

速記:: - 1適用於反轉陣列。它也適用於numpy數組以反轉任意維度。

內置方法通常(通常很大程度上)優於手動執行。

>>> testList= ["mouse","dog","cat"] 
>>> testList[::-1] 
['cat', 'dog', 'mouse']