Acessando itens consecutivos ao usar um gerador

Vamos dizer que eu tenho um gerador de tupla, que eu simulo da seguinte forma:

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

Para este gerador específico, desejo escrever uma função para gerar o seguinte:

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

Então, estou repetindo três itens consecutivos de cada vez e imprimindo-os, exceto quando me aproximo do final.

A primeira linha da minha função deve ser:

t = tuple(g)

Em outras palavras, é melhor trabalhar diretamente com uma tupla ou pode ser benéfico trabalhar com um gerador. Se for possível abordar este problema usando ambos os métodos, indique os benefícios e desvantagens das duas abordagens. Além disso, se for aconselhável usar a abordagem do gerador, como essa solução pode parecer?

Aqui está o que eu faço atualmente:

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)

ATUALIZAR:

Observe que atualizei minha função para obter um segundo argumento, especificando o comprimento da janela.

questionAnswers(7)

yourAnswerToTheQuestion