如果這個問題錯位或重複,我很抱歉提前。鏈表元素上的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'。 –