Quelqu'un peut-il me dire ce qui ne va pas avec le code que j'écris? J'essaie de trouver une somme de tous les éléments de cette liste. Mon code:
def determine_sum(m_list, sum_count):
for i in range(len(m_list)):
if isinstance(m_list[i], int):
sum_count += m_list[i]
else:
return determine_sum(m_list[i], sum_count)
return sum_count
m_list = [1, 2, 3, [4, 5], [4, [3,4]] ]
print(determine_sum(m_list, 0))
Le résultat est 15 , mais je m'attendais à 26.
3 Réponses :
def determine_sum(m_list, sum_count):
for i in range(len(m_list)):
if isinstance(m_list[i], int):
sum_count += m_list[i]
else:
# Don't return here, just add the count and keep looping
sum_count = determine_sum(m_list[i], sum_count)
return sum_count
Cela renvoie le nombre 78, qui n'est pas une somme des éléments de la liste.
Corrigé, nécessaire =, pas + =
Obtention de la somme de la liste d'exemples: 26
Il vous manquait pour ajouter la sortie de la somme de déterminer imbriquée dans le sum_count.
def determine_sum(m_list, sum_count):
for i in range(len(m_list)):
if isinstance(m_list[i], int):
print(m_list[i])
sum_count += m_list[i]
else:
sum_count = determine_sum(m_list[i], sum_count)
return sum_count
m_list = [1, 2, 3, [4, 5], [4, [3,4]] ]
print("Sum:", determine_sum(m_list, 0)) # 26
Le principal problème avec votre code est cette ligne:
sum_count = determine_sum(m_list[i], sum_count)
Si vous rencontrez une autre liste, vous appelez determine_sum de manière récursive, ce qui calcule la somme des sous -list et commence par un nombre de sum_count . Cependant, quel que soit le résultat de la première sous-liste, c'est le résultat total que vous renvoyez. Votre fonction ignore les listes suivantes, car return termine la fonction.
Une fonction récursive comme celle-ci n'a pas besoin de passer sum_count . Au lieu de cela, vous pouvez simplement calculer la somme d'une sous-liste de manière récursive, puis ajouter le résultat à la somme actuelle, en continuant la boucle. Chaque appel de determine_sum obtiendra sa propre copie de la somme en cours, vous n'avez donc pas besoin de la transmettre.
Comme ceci:
def determine_sum(m_list):
sum_count = 0
for i in range(len(m_list)):
if isinstance(m_list[i], int):
sum_count += m_list[i]
else:
sum_count += determine_sum(m_list[i])
return sum_count
m_list = [1, 2, 3, [4, 5], [4, [3,4]] ]
print(determine_sum(m_list))
Heureux de l'entendre @SebastienBoulas - vous devriez probablement accepter la réponse qui vous a le plus aidé comme réponse à votre question, afin qu'elle ne soit plus marquée comme sans réponse.
Astuce: une boucle
for ... in range ():où les nombres ne sont utilisés que pour indexer certains objets doit être simplifiée enfor ... in ...:.