イテレータ自体をインクリメントせずに、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)
イテレータには、現在の値を取得する方法がありません。それが必要な場合は、自分で参照するか、イテレータをラップして保持します。
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関数では、デフォルトのパラメーターを使用できます。
組み込みの方法はないと思います。問題のイテレータを、1つの要素をバッファリングするカスタムイテレータ内にラップするのは非常に簡単です。
これを行う必要があるときは、次のようなクラスを作成して解決しました。
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を呼び出すことで現在の値を取得できます。