HOWTO · Python

Trouver la médiane d'une liste en Python

Ce tutoriel montre comment calculer la médiane d'une liste en Python

Sur cette page

La médiane est la valeur centrale une fois les nombres triés du plus petit au plus grand. Avec un nombre impair de valeurs, l’une d’elles se trouve au milieu. Avec un nombre pair, la médiane est la moyenne arithmétique des deux valeurs centrales. Par exemple, la valeur centrale de [1, 3, 8] est 3 ; pour [1, 3, 8, 10], la médiane est (3 + 8) / 2, soit 5.5. Ces méthodes supposent que les valeurs sont numériques et peuvent être ordonnées.

Ce que signifie la médiane d’une liste

Le tri est essentiel : la médiane représente le centre des valeurs ordonnées, et non la valeur située au milieu de la liste d’origine. L’ordre initial des éléments ne change donc pas le résultat. Pour une liste d’un seul élément, cet élément est la médiane. Avec un nombre pair de valeurs, le résultat ne figure pas nécessairement dans la liste d’origine, puisqu’il correspond à la moyenne des deux valeurs centrales.

Trouver la médiane avec le module statistics de Python

Pour une liste Python classique, le module statistics de la bibliothèque standard offre une solution directe et simple. Sa fonction median() applique automatiquement les règles correspondant aux longueurs paires et impaires. Cet exemple utilise une liste contenant un nombre pair de valeurs.

Exécutez cet exemple. Le code et les libellés ou sorties affichés dans ce bloc restent en anglais :

import statistics

data = [7, 1, 9, 3]
print(statistics.median(data))
5.0

Importez statistics depuis la bibliothèque standard ; aucun paquet tiers n’est nécessaire.

Trouver la médiane avec NumPy

Si vos données sont déjà dans un tableau NumPy, numpy.percentile(data, 50) calcule son 50e percentile, qui correspond à la médiane de ces données numériques. NumPy est utile lorsque le reste du travail utilise déjà des tableaux ; cet exemple ne compare pas ses performances à celles de statistics.

Exécutez cet exemple. Le code, le message affiché et la sortie restent en anglais :

try:
    import numpy as np
except ImportError:
    print("Install NumPy to run this example.")
else:
    data = np.array([7, 1, 9, 3])
    print(np.percentile(data, 50))
5.0

Cet exemple nécessite que NumPy soit installé dans l’environnement Python.

Implémenter soi-même une fonction de calcul de la médiane

Une fonction personnalisée rend chaque étape explicite. Commencez par créer une copie triée avec sorted(), puis examinez sa longueur. Si le nombre d’éléments est impair, renvoyez celui d’indice n // 2. S’il est pair, faites la moyenne des éléments qui précèdent cet indice et se trouvent à cet indice. Grâce à sorted(), la liste de l’appelant conserve son ordre initial.

Exécutez les exemples ; le code et les sorties affichées restent en anglais :

def calculate_median(values):
    ordered = sorted(values)
    count = len(ordered)
    middle = count // 2

    if count % 2:
        return ordered[middle]
    return (ordered[middle - 1] + ordered[middle]) / 2

numbers = [7, 1, 9, 3]
print(calculate_median(numbers))
print(numbers)
5.0
[7, 1, 9, 3]

La fonction attend au moins une valeur numérique pouvant être ordonnée. Dans le cas d’une longueur paire, elle divise par 2 ; le résultat peut donc être un nombre flottant même si les valeurs d’entrée sont des entiers. La sortie affiche d’abord la médiane, puis confirme que la liste d’origine n’a pas été triée.

Avec un nombre impair de valeurs, la même fonction renvoie l’unique valeur centrale. Cet exemple utilise trois valeurs pour rendre ce comportement visible :

def calculate_median(values):
    ordered = sorted(values)
    count = len(ordered)
    middle = count // 2

    if count % 2:
        return ordered[middle]
    return (ordered[middle - 1] + ordered[middle]) / 2

numbers = [7, 1, 9]
print(calculate_median(numbers))
print(numbers)
7
[7, 1, 9]

Gérer les listes vides sans modifier la liste d’entrée

Une liste vide n’a pas de valeur centrale. Choisissez un comportement adapté au code appelant au lieu de traiter silencieusement cette entrée comme un nombre. La fonction statistics.median() de la bibliothèque standard lève une exception StatisticsError lorsque la liste est vide. L’exemple NumPy ci-dessus exige un tableau non vide ; vérifiez qu’il contient des valeurs avant d’appeler numpy.percentile(data, 50). La fonction personnalisée ci-dessus exige elle aussi une liste non vide, car elle indexe les valeurs triées. Si des listes vides sont possibles, vérifiez donc explicitement l’entrée :

Le code et les libellés ou sorties affichés dans cette section restent en anglais.

def calculate_median(values):
    if not values:
        return None

    ordered = sorted(values)
    middle = len(ordered) // 2
    if len(ordered) % 2:
        return ordered[middle]
    return (ordered[middle - 1] + ordered[middle]) / 2

Ici, None est un choix explicite propre à l’application ; le code appelant peut le vérifier avant d’utiliser le résultat. Cette version trie également une copie et ne réorganise donc pas la liste d’entrée. Pour une liste d’un seul élément comme [5], elle renvoie 5. Utilisez la fonction de la bibliothèque standard pour une implémentation courante, NumPy si vos données sont déjà dans des tableaux, ou une fonction personnalisée si son comportement doit correspondre aux besoins de votre application.