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

创建一个接受列表并将其反转的迭代器

如何解决创建一个接受列表并将其反转的迭代器

我正在创建一个迭代器,它接收一个列表并将其反转。出于某种原因,当我运行我的代码时,我不断收到未定义的“计数”。一切似乎都缩进了就好了,或者至少我是这么想的。一些帮助将非常感激

这是我的代码

class RevIter():
    def __iter__(self):
        self.nums = ( [1,2,3,4,5] )
        self. index = 0
        return self
    def __next__(self):
         if self.index <= 6:      
            count = self.nums[self.index]
            return count
         else:
            raise stopiteration
        
            
for i in RevIter():
    print(count.reverse())

解决方法

制作一个合适的可迭代类

  • __init__ 中移动初始化
  • 改变 self.index 方法中的 __next__,如果你不移动它,你会得到一个无限迭代,产生始终相同的值
  • 只需在主代码中使用 i
class RevIter:
    def __init__(self):
        self.nums = [1,2,3,4,5]
        self.index = len(self.nums) - 1

    def __iter__(self):
        return self

    def __next__(self):
        if 0 <= self.index < len(self.nums):
            count = self.nums[self.index]
            self.index -= 1
            return count
        else:
            raise StopIteration

for i in RevIter():
    print(i)

5
4
3
2
1

对于前向迭代

class RevIter:
    def __init__(self):
        self.nums = [1,5]
        self.index = 0

    def __next__(self):
        if 0 <= self.index < len(self.nums):
            count = self.nums[self.index]
            self.index += 1
            return count
        else:
            raise StopIteration
,

在您的 for 循环中,您正在打印 (count.reverse())。在这里你告诉 python 有一个名为 count 的对象,但没有这样的对象。

,

您正在尝试打印计数变量,该变量不是在您的 for 循环中即时成像!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。