如何解决如何在python中创建一个迭代器类,该迭代器类将以相反的顺序迭代输入?
我需要创建一个迭代器类,它将以相反的顺序遍历输入。我几乎需要使用类来复制以下代码。
def reverse(iterable)
rev = len(iterable) - 1
while rev >= 0:
yield iterable[rev]
rev -=1
代码应类似于:
>>> nums = [1,5,6]
>>> ex = RevIter(nums)
>>> iter(ex) is ex
True
>>> next(ex) == 6
True
>>> next(ex)
5
>>> next(ex)
1
到目前为止,我的代码无法正常工作
class RevIter:
def __init__(self,iterable):
self.iterable = iterable
def __next__(self):
rev = len(iterable) - 1
while rev >=0:
yield iterable[rev]
rev -= 1
注意:我不能使用任何内置函数,例如reverse()或iter()
解决方法
您不能在yield
特殊方法中使用__next__
,yield
是为生成器保留的。
以下是实现的提示:
class RevIter:
def __init__(self,iterable):
self.iterable = iterable
self.index = len(iterable)
def __next__(self):
# Maybe update self.index to prepare it for the next element?
return # Maybe return something using the iterable and the index?
要考虑更新的方式,可以想象一下,当逐步浏览5个元素的列表时,索引将是(按顺序)
4,3,2,1,0
,
可迭代类中的__next__
方法不是
生成器本身-这是一个简单的函数
返回一个值,称为迭代器的一部分
协议。
__iter__
特殊类可以选择
成为生成器和功能yield
。但是,如果你打电话
iter(myinstance)
,其中__iter__
是生成器
函数(即具有yield
关键字的函数),
iter
调用将创建一个新的可迭代实例,该实例
与myinstance
要使mysinstance is iter(myinstance)
部分正常工作,
您必须具有返回iter
的{{1}}方法。
还有一个self
方法将返回下一个所需的项目。
__next__
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。