链接列表元素上的Python迭代器
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了链接列表元素上的Python迭代器,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1890字,纯文字阅读大概需要3分钟。
内容图文
![链接列表元素上的Python迭代器](/upload/InfoBanner/zyjiaocheng/817/5450ce231f3a45798c5839038495a7a7.jpg)
如果这个问题错位或重复,我会提前道歉.
这个问题在本质上与doubly Linked list iterator python类似.
但是,与引用的问题不同,我不希望创建一个包含大量元数据的总体链表对象,并提供迭代器(它们对我的应用程序来说不是必需的).
我的问题是:是否有任何根本原因我不应该或不能提供不迭代它包含的元素的迭代器,而是跳过通过引用相互链接的不同元素对象?
迭代器对于代码的正常运行不是必需的,但我更喜欢构造中for项的语法糖.
我的实现看起来有点像这样(简化版):
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迭代到下一个.
这种方法似乎有效,但python迭代器文档似乎假设迭代器将遍历父对象包含的元素.是否有任何陷阱妨碍我做这样的事情?
谢谢!
解决方法:
这样做是没有问题的.
可以将每个LinkedAccount视为集合中的节点,也可以将其视为集合本身,其中包含其后的节点.
链表可以被认为是节点并且可能被认为是另一个链表.
[1, [2, [3, [4]]]]
实际上,这是Lisp等语言中列表的概念.
在功能上或文档方面没有任何东西阻止迭代器返回与调用它的对象相同的类型.同样地,没有禁止集合“包含”(或等效地指向)其他集合,嵌套n-deep.
如果您可以像上面的列表一样查看LinkedAccount,这对于使用您的代码的人来说是有意义的,您可能没问题.
内容总结
以上是互联网集市为您收集整理的链接列表元素上的Python迭代器全部内容,希望文章能够帮你解决链接列表元素上的Python迭代器所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。