Digamos que temos uma lista multidimensional, mas com dimensões aleatórias, como:
[
[
[1, 2, [3, 4]],
[[5, 6], 7]
],
[8, 9, [10]]
]
Existe alguma maneira rápida de simplificar tudo e obter apenas a lista [1, 2, ..., 10]
?
Sei que há uma solução para listas de listas, como loops ou listas de compreensão, mas aqui assumimos que não sabemos as dimensões da lista e que pode haver diferentes níveis de listas aninhadas.
Uma função recursiva pode fazer isso rapidamente:
Esta função itera por cada item na primeira camada de listas. Se encontrar algo que não seja uma lista, ela retorna com
yield
. Se encontrar outra lista, a função chama a si mesma para iterar sobre essa lista também. O que você acaba tendo é cada valor dentro de cada lista retornado de volta para o chamador.Não importa quais são as dimensões. Simplesmente faça um achatamento recursivo que deve funcionar: