如果这个问题放错了地方或是重复提问,我先向大家致歉。
这个问题的性质类似于doubly Linked list iterator python。
然而,与参考问题不同的是,我不想创建一个包含大量元数据并提供迭代器的总链表对象(它们对我的应用程序不必要)。
我的问题是:是否存在任何根本原因,使我不能或不应该提供不遍历其包含元素,而是跳转通过引用链接在一起的不同元素对象的迭代器?
迭代器对代码的正确运行不是必需的,但我更喜欢for item in
结构的语法糖。
我的实现大致如下(简化版):
class LinkedAccount:
def __init__(self, someParameter, nextAccount = None, prevAccount = None):
self.someParameter = someParameter
self.next = nextAccount
self.prev = prevAccount
if nextAccount is not None:
self._tell_next()
if prevAccount is not None:
self._tell_prev()
def _tell_next(self):
if self.next is not None:
self.next._recv_next(self)
def _recv_next(self,prevAccount):
self.prev = prevAccount
def _tell_prev(self):
if self.prev is not None:
self.prev._recv_prev(self)
def _recv_prev(self,nextAccount):
self.next = nextAccount
def __iter__(self):
return AccountIterator(self)
class AccountIterator:
def __init__(self,Account):
self.Account = Account
def __iter__(self):
return self
def next(self):
if self.Account is None:
raise StopIteration
else:
curAccount = self.Account
self.Account = self.Account.next
return curAccount
LinkedAccount对象提供了一个迭代器,它使用已经存储在LinkedAccount对象中的.next参数从一个LinkedAccount迭代到下一个LinkedAccount。
这种方法似乎可行,但是Python迭代器文档似乎假定迭代器将遍历父对象包含的元素。是否存在任何陷阱会阻止我执行这样的操作?
谢谢!
car
,但实际上是在迭代列表本身。 - Free Monica Celliocar
没有指向下一个项目的指针,但是LinkedAccount
确实有指向下一个项目的指针。因此,在这个类比中,LinkedAccount
是cons
,而LinkedAccount.someParemeter
是car
。 - Paul Draper