在python中使用递归来反转列表

Ari*_*ers 6 python recursion list python-2.7 python-3.x

def revlist(lst):
    if len(lst) == 1:
        return lst
    else:
        return lst[(len(lst) - 1)
Run Code Online (Sandbox Code Playgroud)

我已经到了这一点,但我不知道接下来该做什么.我正在为我的考试练习递归.如果有人可以提供帮助,我会感激不尽.

tim*_*geb 8

你的简单情况很好,如果列表的长度是1(或更小),只需返回列表.实际上,我们可以简单地检查列表是否为空(通过发布if not lst).如果列表较大,则必须考虑如何在递归情况下简化问题.换句话说,您可以这样表达:如果列表长于1,请给我扩展列表的最后一个元素,当我反转给定列表时没有最后一个元素.后一个列表比原始列表小一个,因此简化了问题.

在代码中:

def reverse(lst):
    if not lst: # this will be true if lst == []
        return lst
    return lst[-1:] + reverse(lst[:-1]) # recursive case

# Demo
print(reverse([1,2,3,4,5])) # [5, 4, 3, 2, 1]
Run Code Online (Sandbox Code Playgroud)


小智 5

其他方式

def revlist(lst):
    if len(lst) == 0:
        return ([])
    else:
        return (revlist(lst[1:]) + [lst[0]] )
Run Code Online (Sandbox Code Playgroud)


eri*_*rip 0

基本情况是您没有列表,因此您想返回空列表。

递归情况是这样的,所以你想将最后一个元素添加到列表其余部分的递归调用中。

def revlist(lst):
    if not lst:
        return lst
    # Create a list containing only the last element
    last = [lst[-1]]
    # Rest contains all elements up to the last element in `lst`
    rest = lst[:-1]
    # Prepend last to recursive call on `rest`
    return last + revlist(rest)
Run Code Online (Sandbox Code Playgroud)

这是我写的驱动程序:

lst = [1, 2, 3, 4, 5]
print(revlist(lst))
Run Code Online (Sandbox Code Playgroud)

这返回了:

12:03 $ python test.py 
[5, 4, 3, 2, 1]
Run Code Online (Sandbox Code Playgroud)

这适用于所有可迭代对象。