无论如何,要使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中的 双向 迭代器?
不,通常您不能使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
问题内容: 如何从最后一项到第一个迭代一个项目? 问题答案: 如果要继续使用集合,可以使用以下方法: 如果您可以改用数组,则可以看一下answer。
前面章节中,已经对列表(list)、元组(tuple)、字典(dict)、集合(set)这些序列式容器做了详细的介绍。值得一提的是,这些序列式容器有一个共同的特性,它们都支持使用 for 循环遍历存储的元素,都是可迭代的,因此它们又有一个别称,即迭代器。 从字面来理解,迭代器指的就是支持迭代的容器,更确切的说,是支持迭代的容器类对象,这里的容器可以是列表、元组等这些 Python 提供的基础容器,
上面简单的介绍了一下迭代,迭代是 Python 最强大的功能之一,是访问集合元素的一种方式。现在正式进入主题:迭代器,迭代器是一个可以记住遍历的位置的对象。 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。 迭代器只能往前不会后退。 迭代器有两个基本的方法:iter() 和 next(),且字符串,列表或元组对象都可用于创建迭代器,迭代器对象可以使用常规 for 语句进行遍历,也
本文向大家介绍C++ 向量迭代器,包括了C++ 向量迭代器的使用技巧和注意事项,需要的朋友参考一下 示例 begin将an返回iterator到序列容器中的第一个元素。 end返回iterator末尾的第一个元素。 如果矢量对象const,无论是begin和end返回const_iterator。如果const_iterator即使向量不返回,也要返回const,则可以使用cbegin和cend。
本文向大家介绍Python迭代器与可迭代与生成器,包括了Python迭代器与可迭代与生成器的使用技巧和注意事项,需要的朋友参考一下 示例 一个迭代是一个对象,可以返回一个迭代器。具有状态且具有__iter__ 方法并返回迭代器的任何对象都是可迭代的。也可能是没有状态的对象,该对象实现了__getitem__方法。-该方法可以获取索引(从零开始),并IndexError在索引不再有效时引发。 Py
本文向大家介绍浅谈python迭代器,包括了浅谈python迭代器的使用技巧和注意事项,需要的朋友参考一下 1、yield,将函数变为 generator (生成器) 例如:斐波那契数列 2、Iterable 所有可以使用for循环的对象,统称为 Iterable (可迭代) 3、Iterator 可以使用next() <__next__()> 函数调用并且不断返回下一个值的对象成为 Iterat