Python >> Tutoriel Python >  >> Python

6 façons d'obtenir la médiane d'une liste Python

Formulation du problème

Soit une liste Python de nombres entiers ou flottants.

Comment calculer la médiane d'une liste Python ?

Formellement, la médiane est "la valeur séparant la moitié supérieure de la moitié inférieure d'un échantillon de données" (wiki).

Notez que la médiane est différente de la moyenne ou de la moyenne, comme le montre le graphique suivant :

S'il y a un nombre pair d'éléments dans la liste (par exemple, len(list)%2==0 ), il n'y a pas d'élément intermédiaire. Dans ce cas, la médiane peut être la moyenne des deux éléments du milieu.

Méthode 1 :statistiques.médiane()

Le moyen le plus simple d'obtenir la médiane d'une liste Python your_list est d'importer le statistics bibliothèque et appelez statistics.median(your_list) . Le statistics est incluse dans les bibliothèques standard Python, il n'est donc pas nécessaire de l'installer manuellement.

Voici un exemple simple :

import statistics


def get_median(lst):
    return statistics.median(lst)


odd = [3, 2, 4, 7, 1]
print(get_median(odd))
# 3


even = [3, 2, 4, 7, 1, 1]
print(get_median(even))
# 2.5

Nous créons deux listes :

  • 3 est la médiane de la liste [3, 2, 4, 7, 1] comme on peut le voir dans la représentation triée [1, 2, 3 , 4, 7].
  • 2,5 est la médiane de la liste [3, 2, 4, 7, 1, 1] comme on peut le voir dans la représentation triée [1, 1, 2 , 3 , 4, 7] et (2+3)/2 vaut 2,5.

Méthode 2 :Aucune approche de bibliothèque

Pour obtenir la médiane d'une liste Python sans prise en charge de la bibliothèque, effectuez les trois étapes suivantes :

  • Trier la liste.
  • Obtenir l'index de l'élément médian gauche.
  • Faites la moyenne des éléments médians gauche et droit.

Cela se fait dans les trois lignes Python :

  • tmp = sorted(lst)
  • mid = len(tmp) // 2
  • res = (tmp[mid] + tmp[-mid-1]) / 2

La troisième ligne contient la médiane de la liste Python. Cela fonctionne pour les listes avec un nombre pair et un nombre impair d'éléments.

Nous utilisons l'indexation par liste négative pour accéder à l'élément médian droit. Si la liste contient un nombre impair d'éléments, les index mid gauche et droit sont en fait les mêmes, auquel cas la valeur de l'élément mid unique est renvoyée.

Voici un exemple :

def get_median(lst):
    tmp = sorted(lst)
    mid = len(tmp) // 2
    return (tmp[mid] + tmp[-mid-1]) / 2


odd = [3, 2, 4, 7, 1]
print(get_median(odd))
# 3


even = [3, 2, 4, 7, 1, 1]
print(get_median(even))
# 2.5

Il convient de noter que l'approche naïve consistant à ne pas faire la moyenne des deux éléments médians dans le cas d'une liste avec un nombre pair d'éléments est souvent suffisante également :

Méthode 3 :Approche naïve sans bibliothèque

Si vous êtes d'accord pour renvoyer le premier élément médian lors de la recherche de la médiane d'une liste avec un nombre pair d'éléments, vous pouvez utiliser l'approche suivante :

  • Trier la liste.
  • Obtenir l'index de l'élément central gauche (si la longueur de la liste est paire) et l'index de l'élément central unique (si la longueur de la liste est impaire).
  • Renvoyer la médiane en accédant à l'élément intermédiaire dans la liste triée.

En particulier, les trois lignes de Python font le travail :

  • tmp = sorted(lst)
  • mid = len(tmp) // 2
  • res = tmp[mid]

La variable res contient la médiane de la liste.

Voici un exemple :

def get_median(lst):
    tmp = sorted(lst)
    mid = len(tmp) // 2
    return tmp[mid]


odd = [3, 2, 4, 7, 1]
print(get_median(odd))
# 3


even = [3, 2, 4, 7, 1, 1]
print(get_median(even))
# 3

Veuillez noter que ce n'est pas nécessairement la bonne méthode statistique pour calculer la médiane d'une liste avec un nombre pair d'éléments.

Méthode 4 :np.median()

Vous pouvez obtenir la médiane d'une liste Python your_list en important le numpy bibliothèque et appelez le numpy.median(your_list) .

Voici un exemple simple de la façon dont nous utilisons NumPy pour calculer la médiane d'une liste Python :

import numpy as np


def get_median(lst):
    return np.median(lst)


odd = [3, 2, 4, 7, 1]
print(get_median(odd))
# 3.0


even = [3, 2, 4, 7, 1, 1]
print(get_median(even))
# 2.5

Nous créons deux listes :

  • 3 est la médiane de la liste [3, 2, 4, 7, 1] comme on peut le voir dans la représentation triée [1, 2, 3 , 4, 7]. NumPy convertit toutes les sorties en float si possible.
  • 2,5 est la médiane de la liste [3, 2, 4, 7, 1, 1] comme on peut le voir dans la représentation triée [1, 1, 2 , 3 , 4, 7] et (2+3)/2 vaut 2,5.

Quelle est la différence entre numpy.median() et statistics.median()

Contrairement au statistics bibliothèque, le numpy la bibliothèque n'est pas inclus dans les bibliothèques standard Python, il doit donc être installé manuellement si vous ne l'avez pas déjà fait.

C'est pourquoi je recommande d'utiliser statistics.median() plutôt que numpy.median() si tout ce que vous voulez faire est de calculer la médiane d'une liste Python.

Aussi, statistics.median() renvoie une valeur entière pour les listes d'entiers avec un nombre impair d'éléments alors que numpy.median() retourne toujours un flottant. Sinon, les deux fonctions sont identiques.

Tutoriel associé :Comment installer NumPy en Python ?

Méthode 5 :np.percentile()

Une approche généralisée pour calculer la médiane d'une liste my_list des nombres est d'utiliser le np.percentile(my_list, 50) fonction qui renvoie le 50e centile exact de la liste. Le 50e centile est la médiane.

Définition : 50e centile :également connu sous le nom de médiane. La médiane réduit de moitié l'ensemble de données . La moitié des réponses se situe sous la médiane et l'autre moitié se situe au-dessus de la médiane. (source)

Voici l'exemple de code :

import numpy as np


def get_median(lst):
    return np.percentile(lst, 50)


odd = [3, 2, 4, 7, 1]
print(get_median(odd))
# 3.0


even = [3, 2, 4, 7, 1, 1]
print(get_median(even))
# 2.5

Méthode 6 :Python de base sur plusieurs lignes

Une approche simple pour trouver la médiane d'une liste Python consiste à gérer différemment les listes de taille égale et de taille impaire après avoir trié la liste :

  • Si la liste a un nombre impair d'éléments, renvoyez immédiatement la médiane en utilisant len(l)//2 pour obtenir l'index de l'élément médian.
  • Sinon, faites la moyenne des deux éléments au milieu de la liste triée.

Voici l'extrait de code qui implémente cette approche — commentaires pour l'explication des parties pertinentes :

def get_median(lst):
    l = sorted(lst)
    mid = len(l) // 2
    if len(lst)%2:
        # list is odd-sized:
        # single median exists
        return l[mid]
    else:
        # list is evenly-sized:
        # average two mid values
        return (l[mid-1]+l[mid])/2


odd = [3, 2, 4, 7, 1]
print(get_median(odd))
# 3.0


even = [3, 2, 4, 7, 1, 1]
print(get_median(even))
# 2.5

Vidéo connexe - Trouver la médiane d'une liste Python