当前位置:  开发笔记 > 编程语言 > 正文

如何在Python中使用递归来反转列表?

如何解决《如何在Python中使用递归来反转列表?》经验,为你挑选了3个好方法。

我想要一个函数,它将返回给出的列表的反向 - 使用递归.我怎样才能做到这一点?



1> John Milliki..:

将列表的第一个元素附加到反向子列表:

mylist = [1, 2, 3, 4, 5]
backwards = lambda l: (backwards (l[1:]) + l[:1] if l else []) 
print backwards (mylist)



2> Claudiu..:

更明确一点:

def rev(l):
    if len(l) == 0: return []
    return [l[-1]] + rev(l[:-1])

这变成了:

def rev(l):
    if not l: return []
    return [l[-1]] + rev(l[:-1])

哪个变成:

def rev(l):
    return [l[-1]] + rev(l[:-1]) if l else []

这和另一个答案是一样的.


尾递归/ CPS样式(无论如何python都不优化):

def rev(l, k):
    if len(l) == 0: return k([])
    def b(res):
        return k([l[-1]] + res)
    return rev(l[:-1],b)


>>> rev([1, 2, 3, 4, 5], lambda x: x)
[5, 4, 3, 2, 1]



3> 小智..:

我知道这不是一个有用的答案(虽然这个问题已经得到解答),但在任何实际代码中,请不要这样做.Python无法优化尾调用,函数调用缓慢且具有固定的递归深度,因此至少有3个原因可以反复进行迭代.

推荐阅读
爱唱歌的郭少文_
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有