使用递归来反转python中的列表?

时间:2015-10-21 16:48:42

标签: python list function debugging recursion

是否有另一种方法可以使用递归在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))

5 个答案:

答案 0 :(得分: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 :(得分:1)

这有a function

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

答案 2 :(得分: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]

答案 3 :(得分: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]

答案 4 :(得分:-1)

简写:: - 1适用于反转数组。它也适用于numpy数组以反转任意维度。

内置方法通常(通常非常)优于手动实现。

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