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)
我已经到了这一点,但我不知道接下来该做什么.我正在为我的考试练习递归.如果有人可以提供帮助,我会感激不尽.
你的简单情况很好,如果列表的长度是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)
基本情况是您没有列表,因此您想返回空列表。
递归情况是这样的,所以你想将最后一个元素添加到列表其余部分的递归调用中。
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)
这适用于所有可迭代对象。
| 归档时间: |
|
| 查看次数: |
4348 次 |
| 最近记录: |