1. ホーム
  2. python

[解決済み] Pythonジェネレータで1つ先の要素を見る(peek)方法とは?

2023-04-03 23:12:25

質問

Pythonのジェネレータで、1つ先の要素を見る方法がわかりません。私が見たとたんに、それは消えてしまいます。

こんな感じです。

gen = iter([1,2,3])
next_value = gen.next()  # okay, I looked forward and see that next_value = 1
# but now:
list(gen)  # is [2, 3]  -- the first value is gone!

以下はより実戦的な例です。

gen = element_generator()
if gen.next_value() == 'STOP':
  quit_application()
else:
  process(gen.next())

1つ先の要素を見ることができるジェネレータを書くのを手伝ってくれる人はいますか?

どのように解決するのですか?

PythonのジェネレータAPIは一方通行です。読み込んだ要素をプッシュバックすることはできません。しかし、新しいイテレータを作るには itertools モジュール を使って新しいイテレータを作成し、その要素を前置することができます。

import itertools

gen = iter([1,2,3])
peek = gen.next()
print list(itertools.chain([peek], gen))