Python 递归定义的列表类的反向方法
我一直在用Python编写一个递归定义的列表类,但在编写一个反向方法以递归方式运行时遇到了麻烦。这是这门课的基础Python 递归定义的列表类的反向方法,python,list,recursion,reverse,Python,List,Recursion,Reverse,我一直在用Python编写一个递归定义的列表类,但在编写一个反向方法以递归方式运行时遇到了麻烦。这是这门课的基础 class RecList: def __init__(self): self._head = None self._rest = None 基本情况是self.\u head,它是列表中的第一个条目,然后是递归情况,它本质上是另一个包含自身的列表。\u head开始,然后递归定义。这一过程一直进行到最底层,其中self.\u head和self.\u rest
class RecList:
def __init__(self):
self._head = None
self._rest = None
基本情况是self.\u head,它是列表中的第一个条目,然后是递归情况,它本质上是另一个包含自身的列表。\u head开始,然后递归定义。这一过程一直进行到最底层,其中self.\u head和self.\u rest=None。有没有一种简单的方法可以为这样定义的列表编码反向方法?试试以下方法:
class RecList:
def __init__(self, head=None, rest=None):
self._head = head
self._rest = rest
def __str__(self):
if self._rest is None:
return str(self._head)
return str(self._head) + ' ' + self._rest.__str__()
def reverse(self):
return self._reverse_aux(None)
def _reverse_aux(self, acc):
if self._rest is None:
return RecList(self._head, acc)
return self._rest._reverse_aux(RecList(self._head, acc))
lst = RecList(1, RecList(2, RecList(3, None)))
print lst
> 1 2 3
print lst.reverse()
> 3 2 1
请发布一个类的使用示例,包括重新列表的构造和所创建实例的打印。为什么不简单地使用collections.deque呢?它是以链表的形式实现的,并且是用C编写的,因此它比任何纯Python解决方案都要快。严格地说,这不是我的,这是学校的作业。我真的不想让教授找到所有的资料。非常感谢这让我知道了如何解决这个问题。
class RecList:
def __init__(self, head, tail):
self.head = head
self.tail = tail
def foldr(f, acc, xs):
head = xs.head
tail = xs.tail
if tail:
return foldr(f, f(head, acc), tail)
else:
return f(head, acc)
testList = RecList(1, RecList(2, RecList(3, None)))
test = foldr(lambda x, a: RecList(x, a), RecList(None, None), testList)
print test.head
print test.tail.head