如何使MyList可迭代?

Eug*_*era 2 python functional-programming class list nodes

我想创建一个行为类似于列表的类.挑战在于不使用列表或字典.到目前为止,我已经创建了一个如下所示的节点类:

class Node:

    def __init__(self, value=None):
        self.next = None
        self.last = None
        self.value = valor

    def __repr__(self):
        return self.value
Run Code Online (Sandbox Code Playgroud)

而且这个MyList类基本上是一个节点链,有一个头节点和一个尾节点.事情是,我想让它可迭代,所以我可以用它运行for.我搜索了它和下一个如何工作,并提出了这样的事情:

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
Run Code Online (Sandbox Code Playgroud)

它工作但它显然删除里面的数据MyList所以我不能再使用它.有关如何在不弄乱对象内部信息的情况下获得相同结果的任何建议?

jon*_*rpe 6

请注意,迭代器协议只要求容器__iter__返回迭代器; 你也可以实现__iter__为生成器,而不是返回实例本身:

def __iter__(self):
    node = self.head
    while node is not None:
        yield node
        node = node.next
Run Code Online (Sandbox Code Playgroud)