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

組み込みの方法はないと思います。問題のイテレータを、1つの要素をバッファリングするカスタムイテレータ内にラップするのは非常に簡単です。

例:Pythonジェネレーターで1つの要素を先読みする方法は?

于 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 に答える