HOWTO · Python

Comment compter les valeurs uniques dans la liste Python

Compter les valeurs uniques dans la liste Python

Sur cette page

Pour compter les valeurs uniques d’une liste Python, une méthode simple consiste à utiliser len(set(values)). Elle fonctionne lorsque les éléments de la liste sont hachables : c’est le cas des nombres, des chaînes de caractères et des tuples dont tous les éléments sont hachables. Si vous devez aussi connaître le nombre d’occurrences de chaque valeur, collections.Counter fournit en un seul passage le nombre de valeurs distinctes et la fréquence de chacune. numpy.unique convient naturellement lorsque vos données sont déjà stockées dans un tableau NumPy. Cet article présente ces trois méthodes et explique comment choisir entre elles.

Compter les valeurs uniques avec set()

La fonction intégrée set() convertit une liste en ensemble, lequel ne conserve chaque valeur distincte qu’une seule fois. En appliquant len() au résultat, vous obtenez le nombre de valeurs uniques sans import supplémentaire.

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

values = [1, 2, 2, 3, 4, 4, 5]
unique_values = set(values)

print(len(unique_values))

Sortie :

5

set(values) élimine les occurrences répétées de 2 et de 4, puis len() indique le nombre d’éléments restants. Les éléments d’entrée doivent être hachables : Python signale une TypeError si la liste contient des éléments tels que d’autres listes ou des dictionnaires. Notez également qu’un ensemble ne conserve pas l’ordre d’origine de la liste. Il répond donc à la question « combien ? », mais pas à « lequel est arrivé en premier ? ». Si vous avez besoin des valeurs uniques dans leur ordre de première apparition, utilisez plutôt list(dict.fromkeys(values) ; sa longueur donne le même nombre d’éléments distincts.

Compter les valeurs uniques avec collections.Counter

collections.Counter est une classe apparentée à un dictionnaire qui compte le nombre d’occurrences de chaque élément d’un itérable. Elle convient lorsque vous voulez connaître à la fois le nombre de valeurs distinctes et la fréquence de chacune.

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

from collections import Counter

values = ["apple", "banana", "apple", "orange", "banana", "kiwi"]
counter = Counter(values)

print(len(counter))
print(dict(counter))

Sortie :

4
{'apple': 2, 'banana': 2, 'orange': 1, 'kiwi': 1}

counter associe chaque valeur à sa fréquence ; len(counter) compte donc les clés distinctes — il y en a quatre dans cette liste. L’accès au compteur par indexation, par exemple counter["apple"], renvoie la fréquence d’une valeur, tandis que counter.most_common(1) renvoie l’élément le plus fréquent. Comme set(), collections.Counter fonctionne avec des éléments hachables et fait partie de la bibliothèque standard.

Compter les valeurs uniques avec NumPy

NumPy est un paquet tiers (installez-le avec pip install numpy) dont la fonction numpy.unique renvoie les valeurs uniques triées d’une entrée de type tableau. La taille du résultat donne le nombre de valeurs distinctes ; en passant return_counts=True, vous obtenez également la fréquence de chaque valeur.

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

import numpy as np

values = np.array([1, 2, 2, 3, 4, 4, 5])
unique_values, counts = np.unique(values, return_counts=True)

print(len(unique_values))
for value, count in zip(unique_values, counts):
    print(value, count)

Sortie :

5
1 1
2 2
3 1
4 2
5 1

Ici, unique_values contient les cinq nombres distincts triés et counts indique le nombre d’occurrences de chacun : 2 et 4 apparaissent deux fois. Comme numpy.unique trie son résultat, cette méthode convient aussi lorsque vous avez besoin des valeurs distinctes dans l’ordre. Utilisez-la si vos données sont déjà stockées dans un tableau NumPy ou si votre projet dépend déjà de NumPy. Pour une simple liste Python, la méthode set() évite cette dépendance supplémentaire.

Choisir la bonne approche

Les trois méthodes donnent le même nombre de valeurs distinctes. Choisissez donc celle qui convient à vos données et aux autres informations dont vous avez besoin :

  • Utilisez set() si vous voulez seulement compter les éléments distincts et hachables, avec la solution la plus courte qui ne nécessite que la bibliothèque standard.
  • Utilisez collections.Counter si vous voulez aussi connaître la fréquence de chaque valeur, les éléments les plus fréquents ou d’autres décomptes par valeur.
  • Utilisez numpy.unique si vos données sont déjà dans un tableau NumPy ou si vous voulez trier les valeurs uniques ; ajoutez return_counts=True pour obtenir les fréquences.

Quelle que soit la méthode choisie, le critère déterminant est l’information supplémentaire dont vous avez besoin — les fréquences, un résultat trié ou l’absence de dépendance supplémentaire — et non le décompte lui-même, que les trois méthodes fournissent de la même façon.