- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
有没有办法让 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
关于python - 让python迭代器倒退?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2777188/
python 有办法反向执行 foreach 吗?我希望同时执行 filter() (或列表理解)和反转列表,这样我就可以避免单独执行(我怀疑这会更慢)。我正在使用 python 2.4(不幸的是我不
我有一个文本文件,其中随机出现了很多字符串@STRING_A,我有兴趣编写一个仅删除其中一些字符串的简短脚本。特别是扫描文件的文件,一旦找到以该字符串开头的行,例如 @STRING_A 然后检查向后
我一直在阅读有关使用 dns-prefetch 和预连接的信息。显然应该使用它们,因为一点一滴都有帮助。 dns-prefetch 比 preconnect 有更好的跨浏览器支持。所以我的问题是,如果
我想用 joda 时间回到 1 年前,但我不想从 2010 年 2 月 15 日到 2009 年 2 月 15 日,而是,如果 2010 年 2 月 15 日是星期一,那么我想去最近的 2009 年星
我是一名优秀的程序员,十分优秀!