Formation I.S.N.

Somme et matriochka

Exercice : Somme d'entiers avec des listes imbriquées

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