Ce tutoriel vous guide à travers l'utilisation de la fonction intégrée sum() en Python, particulièrement pour sommer les éléments d'une liste. Vous apprendrez ses bases, ses cas d'utilisation avancés et ses pièges courants.
Mots-clés : Python, fonction sum, liste, itérable, addition, agrégation, start, nombre, concaténation, générateur
1. A propos de la fonction sum()
La fonction sum() est une fonction intégrée (built-in) de Python. Son rôle principal est de calculer la somme des éléments d'un itérable (comme une liste, un tuple ou un générateur) et de renvoyer le total. C'est un outil essentiel pour les opérations d'agrégation numérique.
Syntaxe de base : sum(iterable, start=0)
- iterable : La collection d'éléments à additionner (obligatoire).
- start : La valeur à partir de laquelle commencer la somme (optionnelle, par défaut 0).
2. Utilisation de base avec des listes numériques
Le cas d'usage le plus courant est l'addition des éléments d'une liste de nombres (int ou float).
2.1 Somme d'une liste d'entiers
Le code suivant montre comment sommer une simple liste d'entiers. La fonction parcourt chaque élément et les additionne les uns aux autres.
|
1 2 3 4 |
# Liste d'entiers notes = [12, 15, 18, 10, 14] total_notes = sum(notes) print(f"La somme des notes est : {total_notes}") |
Sortie :
La somme des notes est : 69
2.2 Somme d'une liste de nombres flottants
La fonction sum() fonctionne de la même manière avec les nombres à virgule flottante.
|
1 2 3 4 |
# Liste de floats depenses = [19.99, 5.50, 12.00, 3.25] total_depenses = sum(depenses) print(f"Total des dépenses : {total_depenses:.2f} €") |
Sortie :
Total des dépenses : 40.74 €
3. Le paramètre 'start' : spécifier la valeur de départ
Le paramètre start est crucial. Il définit la valeur initiale de l'accumulateur. Par défaut, il est à 0. Le résultat final est : start + élément1 + élément2 + ...
3.1 Commencer la somme à une autre valeur
Utile lorsque vous avez déjà une valeur de base à laquelle ajouter les éléments de la liste.
|
1 2 3 4 |
scores_jour = [100, 150, 75] score_initial = 500 score_total = sum(scores_jour, score_initial) print(f"Score total cumulé : {score_total}") |
Sortie :
Score total cumulé : 825
Calcul : 500 + 100 + 150 + 75 = 825
3.2 Cas concret : concaténation de listes (avec sum et start=[])
Une utilisation avancée et pratique de start est la concaténation d'une liste de listes. En définissant start=[], on initialise l'accumulateur à une liste vide, et on "ajoute" (concatène) chaque sous-liste.
|
1 2 3 4 |
# Liste de listes listes = [[1, 2, 3], [4, 5], [6, 7, 8, 9]] liste_aplatie = sum(listes, []) # start est une liste vide print(f"Liste concaténée : {liste_aplatie}") |
Sortie :
Liste concaténée : [1, 2, 3, 4, 5, 6, 7, 8, 9]
Attention : Bien que pratique pour de petites listes, cette méthode peut être inefficace (complexité quadratique) pour de grandes quantités de données. Préférez list(itertools.chain(...)) ou une compréhension de liste dans ce cas.
4. Utilisation avec d'autres itérables et générateurs
sum() accepte n'importe quel itérable, pas seulement les listes.
4.1 Avec un tuple ou un ensemble (set)
|
1 2 3 4 5 6 7 |
# Avec un tuple tuple_nombres = (5, 10, 15) print(sum(tuple_nombres)) # Sortie : 30 # Avec un ensemble ensemble_nombres = {2, 4, 6, 8} print(sum(ensemble_nombres)) # Sortie : 20 (l'ordre n'a pas d'importance) |
Sortie :
30
20
4.2 Avec une expression génératrice (générateur)
Les expressions génératrices sont économes en mémoire. sum() peut les consommer directement sans créer de liste intermédiaire.
|
1 2 3 |
# Somme des carrés des nombres de 1 à 10 somme_carres = sum(x*x for x in range(1, 11)) print(f"Somme des carrés de 1 à 10 : {somme_carres}") |
Sortie :
Somme des carrés de 1 à 10 : 385
Calcul : 1 + 4 + 9 + 16 + 25 + 36 + 49 + 64 + 81 + 100 = 385
5. Erreurs courantes et bonnes pratiques
5.1 Ne pas mélanger les types non numériques (sans paramètre start adapté)
Par défaut (start=0), sum() attend des nombres. Tenter de sommer des chaînes de caractères provoque une TypeError.
|
1 2 3 |
mots = ["Bonjour", "le", "monde"] # total = sum(mots) # Lancerait : TypeError: unsupported operand type(s) for +: 'int' and 'str' print("Cette ligne s'exécute si on ne décommente pas la ligne précédente.") |
Sortie (si la ligne erronée est commentée) :
Cette ligne s'exécute si on ne décommente pas la ligne précédente.
Si on décommente total = sum(mots) : TypeError: unsupported operand type(s) for +: 'int' and 'str'
Pour concaténer des chaînes, utilisez str.join() : ''.join(mots).
5.2 Somme d'une liste vide
La somme d'une liste vide avec le paramètre start par défaut renvoie 0. Si un start personnalisé est fourni, c'est cette valeur qui est renvoyée.
|
1 2 3 |
liste_vide = [] print(sum(liste_vide)) # Sortie : 0 print(sum(liste_vide, start=100)) # Sortie : 100 |
Sortie :
0
100
6. Exemple complet : calcul d'une moyenne
Combinons sum() avec len() pour créer une fonction de calcul de moyenne robuste, gérant la liste vide.
|
1 2 3 4 5 6 7 8 9 10 11 |
def calcul_moyenne(liste_nombres): """Calcule la moyenne d'une liste de nombres. Retourne None si la liste est vide.""" if not liste_nombres: # Si la liste est vide return None return sum(liste_nombres) / len(liste_nombres) # Tests mesures = [22.5, 23.0, 21.8, 24.1, 22.9] print(f"Moyenne des températures : {calcul_moyenne(mesures):.2f}") # Sortie : 22.86 print(f"Moyenne d'une liste vide : {calcul_moyenne([])}") # Sortie : None |
Sortie :
Moyenne des températures : 22.86
Moyenne d'une liste vide : None
Younes Derfoufi
CRMEF OUJDA



