Acceso a elementos consecutivos cuando se utiliza un generador

Digamos que tengo un generador de tuplas, que simulo de la siguiente manera:

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

Para este generador específico, deseo escribir una función para generar lo siguiente:

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

Así que estoy iterando más de tres elementos consecutivos a la vez e imprimiéndolos, excepto cuando me acerco al final.

La primera línea en mi función debería ser:

t = tuple(g)

En otras palabras, es mejor trabajar directamente en una tupla o podría ser beneficioso trabajar con un generador. Si es posible abordar este problema utilizando ambos métodos, indique los beneficios y desventajas de ambos enfoques. Además, si sería prudente utilizar el enfoque del generador, ¿cómo podría verse esa solución?

Esto es lo que hago actualmente:

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)

ACTUALIZAR:

Tenga en cuenta que he actualizado mi función para tomar un segundo argumento que especifica la longitud de la ventana.

Respuestas a la pregunta(7)

Su respuesta a la pregunta