Python: aplanar listas anidadas con índices

Dada una lista de listas anidadas arbitrariamente profundas de tamaño arbitrario, me gustaría un iterador plano y profundo primero sobre todos los elementos en el árbol, pero también con indicaciones de ruta tales que:

for x, y in flatten(L), x == L[y[0]][y[1]]...[y[-1]]. 

Es decir

L = [[[1, 2, 3], [4, 5]], [6], [7,[8,9]], 10]
flatten(L)

debería producir:

(1, (0, 0, 0)),
(2, (0, 0, 1)),
(3, (0, 0, 2)),
(4, (0, 1, 0)),
(5, (0, 1, 1)),
(6, (1, 0)),
(7, (2, 0)),
(8, (2, 1, 0)),
(9, (2, 1, 1)),
(10, (3,))

Hice una implementación recursiva para esto usando generadores conyield declaraciones:

def flatten(l):
    for i, e in enumerate(l):
        try:
            for x, y in flatten(e):
                yield x, (i,) + y
        except:
            yield e, (i,)

pero no creo que sea una implementación buena o responsable, ¿hay alguna receta para hacer esto de manera más general usando solo builtins o std lib cosas comoitertools ?

Respuestas a la pregunta(3)

Su respuesta a la pregunta