On dispose d'une liste contenant des entiers ou des listes d'entiers, ou des listes de listes d'entiers ou des listes de listes de listes d'entiers ou ...
Par exemple : L = [3, [2,3,[4,5,6], [2,[3,5]] ] , 8, [[[[ 4, [1] ]]]], 15 ]
.
L'objectif est d' "aplanir" ces listes afin qu'elles ne contiennent plus que les entiers terminaux.
La liste précédente doit par exemple devenir :
L = [3,2,3,4,5,6,2,3,5,8,4,1,15]
.
Écrire une fonction python récursive accomplissant cette tâche.
- un code python
- un autre code
Une solution Python :
def aplanir(L, Acc = [] ) :
if L == [] : return Acc
else :
x = L.pop(0)
if isinstance(x, list) : aplanir(x,Acc)
else : Acc.append(x)
return aplanir(L, Acc)
print(aplanir([2,3,4,[2,5, [4,7], 8], [2,[[[7]]]], [] ]))
ou encore :
def aplanir(L):
if isinstance(L, list):
return [a for M in L for a in aplanir(M)]
else:
return [L]
print(aplanir([2,3,4,[2,5, [4,7], 8], [2,[[[7]]]], [] ]))
Une solution Python :
def aplanir(L) :
def decapsule(liste):
for x in liste:
try : yield from decapsule(x)
except TypeError : yield x
return list(decapsule(L))
L = [2,3,4,[2,5, [4,7], 8], [2,[[[7]]]], [] ]
print( aplanir(L) )