gpt4 book ai didi

python - 如何使 MyList 可迭代?

转载 作者:行者123 更新时间:2023-11-28 20:41:42 25 4
gpt4 key购买 nike

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

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 中的数据,因此我无法再次使用它。关于如何在不弄乱对象内部信息的情况下获得相同结果的任何建议?

最佳答案

注意迭代器协议(protocol)只需要 the container's __iter__返回一个迭代器;您还可以将 __iter__ 实现为生成器,而不是返回实例本身:

def __iter__(self):
node = self.head
while node is not None:
yield node
node = node.next

关于python - 如何使 MyList 可迭代?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32553396/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com