问题描述
我正在创建一个迭代器,它接收一个列表并将其反转。出于某种原因,当我运行我的代码时,我不断收到未定义的“计数”。一切似乎都缩进了就好了,或者至少我是这么想的。一些帮助将非常感激
这是我的代码:
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 循环中即时成像!