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

问题描述

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

这是我的代码

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 循环中即时成像!