如果这个问题错位或重复,我很抱歉提前。链表元素上的Python迭代器
此问题在性质上与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到下使用。接下来的参数已经存储在LINKEDACCOUNT对象的迭代器。
这种方法似乎可行,但python迭代器文档似乎假设迭代器将遍历父对象包含的元素。是否有任何缺陷阻止我做这样的事情?
谢谢!
我理解这个问题的方式是,这不是一个集合列表,但是他有一个集合中的项目会返回迭代集合的迭代器。所以用Lisp来说,就像试图让它编写代码,它在语义上意味着迭代列表的“car”,但实际上遍历列表本身。 –
非常感谢您对这个问题所做的书面和直接的回答:这种实施可能存在的技术问题! –
@ChadMiller,'car'没有指向下一个项目的指针,但LinkedAccount' *确实有一个指向下一个项目的指针。因此,在这个类比中'LinkedAccount'是'cons','LinkedAccount.someParemeter'是'car'。 –