23

有没有办法让python中的迭代器指向的项目而不增加迭代器本身?例如,我将如何使用迭代器实现以下内容:

looking_for = iter(when_to_change_the_mode)
for l in listA:
    do_something(looking_for.current())
    if l == looking_for.current():
        next(looking_for)
4

4 回答 4

18

迭代器无法获取当前值。如果需要,请自己保留对它的引用,或者将迭代器包装起来为您保留它。

于 2012-07-02T14:47:36.683 回答
9
looking_for = iter(when_to_change_the_mode)
current = next(looking_for)
for l in listA:
    do_something(current)
    if l == current:
        current = next(looking_for)

问题:如果在迭代器结束时怎么办?该next函数允许使用默认参数。

于 2012-07-02T14:54:19.670 回答
4

我不认为有一个内置的方式。将有问题的迭代器包装在一个缓冲一个元素的自定义迭代器中是很容易的。

例如:如何在 Python 生成器中向前看一个元素?

于 2012-07-02T14:47:24.753 回答
2

当我需要这样做时,我通过创建如下类来解决它:

class Iterator:
    def __init__(self, iterator):
        self.iterator = iterator
        self.current = None
    def __next__(self):
        try:
            self.current = next(self.iterator)
        except StopIteration:
            self.current = None
        finally:
            return self.current

这样,您就可以像使用标准迭代器一样使用 next(itr),并且可以通过调用 itr.current 来获取当前值。

于 2019-12-17T09:48:21.327 回答