Uzyskiwanie dostępu do kolejnych elementów podczas korzystania z generatora

Powiedzmy, że mam generator krotek, który symuluję w następujący sposób:

g = (x for x in (1,2,3,97,98,99))

W przypadku tego konkretnego generatora chcę napisać funkcję, która wyświetli następujące dane:

(1,2,3)
(2,3,97)
(3,97,98)
(97,98,99)
(98,99)
(99)

Więc powtarzam po trzech kolejnych elementach jednocześnie i drukuję je, chyba że zbliżam się do końca.

Czy pierwszą linią mojej funkcji powinno być:

t = tuple(g)

Innymi słowy, czy najlepiej jest pracować bezpośrednio na krotce, czy może warto pracować z generatorem. Jeśli możliwe jest podejście do tego problemu przy użyciu obu metod, proszę podać zalety i wady obu podejść. Ponadto, jeśli rozsądnie byłoby użyć podejścia generatora, jak mogłoby wyglądać takie rozwiązanie?

Oto co aktualnie robię:

def f(data, l):
    t = tuple(data)
    for j in range(len(t)):
        print(t[j:j+l])

data = (x for x in (1,2,3,4,5))
f(data,3)

AKTUALIZACJA:

Zauważ, że zaktualizowałem moją funkcję, aby wziąć drugi argument określający długość okna.

questionAnswers(7)

yourAnswerToTheQuestion