【发布时间】:2015-12-09 18:45:27
【问题描述】:
我想创建一个行为类似于列表的类。挑战是在不使用列表或字典的情况下做到这一点。到目前为止,我已经创建了一个如下所示的节点类:
class Node:
def __init__(self, value=None):
self.next = None
self.last = None
self.value = valor
def __repr__(self):
return self.value
MyList 类基本上是一个节点链,有一个头节点和一个尾节点。事情是,我想让它可迭代,这样我就可以用它运行一个 for 。我搜索了 iter 和 next 的工作原理并想出了这样的东西:
class MyList:
def __init__(self):
self.head = None
self.tail = None
def __iter__(self):
return self
def __next__(self):
if self.head:
if self.head.next:
self.head = self.head.next
return self.head.last
aux = self.head
self.head = None
return aux
raise StopIteration
它有效,但它显然删除了MyList 中的数据,所以我不能再次使用它。关于如何在不弄乱对象内部信息的情况下获得相同结果的任何建议?
【问题讨论】:
-
你什么都没产出?
-
@RasmusDamgaardNielsen:
__next__应该返回值,而不是屈服。 -
不。老实说,我不明白生成器是如何工作的。我已经尝试了几次并以循环结束。
-
@dm295 In Python 3 it's
__next__. -
@dm295 in python3 语法改为next
标签: python list class functional-programming nodes