gpt4 book ai didi

python - 让python迭代器倒退?

转载 作者:IT老高 更新时间:2023-10-28 22:22:05 34 4
gpt4 key购买 nike

有没有办法让 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/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com