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 de sommer tous les entiers d'une telle liste.
Écrire une fonction python récursive accomplissant cette tâche.
- une aide technique
- un code python
On pourra utiliser isinstance
:
print(isinstance( 8 , int)) # 8 est-il un int ? True
print(isinstance( 8, list)) # 8 est il une list ? False
print(isinstance( [8], list) ) # True
On peut aussi utiliser :
print(type([8]) is list) #True
print(type(8) is list) # False
print(type(8) is int) # True
Une solution Python :
def sommeImbriquees(L, s = 0) :
if L == [] : return s
else :
if type(L[0]) is int : return sommeImbriquees(L[1:], s+L[0] )
else : return sommeImbriquees(L[1:], s + sommeImbriquees(L[0]) )
L = [2,3,4,[2,5, [4,7], 8], [2,[[[7]]]], [] ]
print(sommeImbriquees(L))
ou encore :
def sommeImbriquees(L) :
if L == [] : return 0
elif type(L) is int : return L
else :
s = 0
for x in L : s += sommeImbriquees(x)
return s
L = [2,3,4,[2,5, [4,7], 8], [2,[[[7]]]], [] ]
print(sommeImbriquees(L))