微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在python中创建一个迭代器类,该迭代器类将以相反的顺序迭代输入?

如何解决如何在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 举报,一经查实,本站将立刻删除。