如何解决创建一个接受列表并将其反转的迭代器
我正在创建一个迭代器,它接收一个列表并将其反转。出于某种原因,当我运行我的代码时,我不断收到未定义的“计数”。一切似乎都缩进了就好了,或者至少我是这么想的。一些帮助将非常感激
这是我的代码:
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 举报,一经查实,本站将立刻删除。