如何解决使python迭代器向后退?
不,通常您不能使Python迭代器向后移动。但是,如果您只想退一步,则可以尝试如下操作:
def str(self, item):
print item
prev, current = None, self.__iter.next()
while isinstance(current, int):
print current
prev, current = current, self.__iter.next()
然后,您可以随时在中访问上一个元素prev
。
如果确实需要双向迭代器,则可以自己实现一个迭代器,但它可能会带来比上述解决方案更多的开销:
class bidirectional_iterator(object):
def __init__(self, collection):
self.collection = collection
self.index = 0
def next(self):
try:
result = self.collection[self.index]
self.index += 1
except IndexError:
raise stopiteration
return result
def prev(self):
self.index -= 1
if self.index < 0:
raise stopiteration
return self.collection[self.index]
def __iter__(self):
return self
解决方法
无论如何,要使python列表迭代器向后移动?
基本上我有这个
class IterTest(object):
def __init__(self,data):
self.data = data
self.__iter = None
def all(self):
self.__iter = iter(self.data)
for each in self.__iter:
mtd = getattr(self,type(each).__name__)
mtd(each)
def str(self,item):
print item
next = self.__iter.next()
while isinstance(next,int):
print next
next = self.__iter.next()
def int(self,item):
print "Crap i skipped C"
if __name__ == '__main__':
test = IterTest(['a',1,2,3,'c',17])
test.all()
运行以下代码将产生输出:
a
1
2
3
Crap i skipped C
我知道为什么它会给我输出,但是有没有办法我可以在str()方法中向后退一步呢?
编辑
好吧,也许可以更清楚地说明这一点。我不想做一个完全相反的事情,基本上我想知道是否有一种简单的方法可以等效于python中的 双向 迭代器?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。