Python: achatar listas aninhadas com índices

Dada uma lista de listas aninhadas arbitrariamente profundas e de tamanho arbitrário, eu gostaria de um iterador plano e aprofundado sobre todos os elementos da árvore, mas com indicações de caminho também que:

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

Isso é

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

deve produzir:

(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,))

Fiz uma implementação recursiva para isso usando geradores comyield afirmações:

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

mas não acho que seja uma implementação boa ou responsável. Existe alguma receita para fazer isso de maneira mais geral usando apenas builtins ou coisas de std lib comoitertools ?

questionAnswers(3)

yourAnswerToTheQuestion