Menu
Français

Ensembles Python (set) : éléments uniques, union, intersection et différence

Quand utiliser un set Python — unicité, tests d'appartenance rapides et les opérations de style mathématique (union, intersection, différence) qui rendent les sets puissants.

Un set, c'est un sac non ordonné d'éléments uniques

Là où les listes et tuples se soucient de l'ordre, les sets non. Là où les listes laissent les doublons s'accumuler, les sets les éliminent silencieusement. Le set est la bonne structure de données quand tu as deux besoins précis :

  1. Tu veux des éléments uniques, point final.
  2. Tu veux vérifier l'appartenance rapidement.

Écris-en un avec des accolades :

main.py
Output
Click Run to see the output here.

Les "red" et "green" en double du second set disparaissent tout simplement. Ce n'est pas une erreur — c'est tout l'intérêt.

Créer des sets

Les deux façons que tu utiliseras vraiment :

main.py
Output
Click Run to see the output here.

Ce dernier point piège tout le monde une fois : {} crée un dictionnaire vide, pas un set vide. L'ambiguïté syntaxique devait tomber sur l'un des deux, et les dicts ont gagné.

Ajouter et retirer

main.py
Output
Click Run to see the output here.

remove vs discard est la distinction clé : remove insiste pour que l'élément soit présent ; discard s'en fiche. Choisis selon si l'absence de l'élément devrait être une erreur.

Appartenance rapide

C'est là que les sets gagnent vraiment leur place. x in some_set s'exécute en temps constant, peu importe la taille du set. x in some_list doit parcourir la liste, ce qui devient lent quand la liste est grande.

main.py
Output
Click Run to see the output here.

Règle empirique : chaque fois que tu te retrouves à écrire if x in some_list dans une boucle, et que la liste a plus de quelques dizaines d'éléments, convertis d'abord la liste en set.

Les maths sur les sets

C'est là que les sets deviennent vraiment amusants. Tu peux les combiner avec des opérateurs qui reflètent les opérations mathématiques sur les ensembles :

main.py
Output
Click Run to see the output here.

Chaque opérateur a aussi une forme méthode (.union(), .intersection(), .difference(), .symmetric_difference()). Les opérateurs sont plus compacts ; les formes méthode acceptent n'importe quel itérable, pas juste un autre set.

Dédupliquer une liste

Un des usages les plus courants des sets, même en dehors de la « logique d'ensemble » :

main.py
Output
Click Run to see the output here.

Une ligne, doublons disparus. Un truc à noter : l'ordre n'est pas préservé. Si tu as besoin d'unicité et de l'ordre original, utilise plutôt dict.fromkeys() :

main.py
Output
Click Run to see the output here.

Les dicts préservent l'ordre d'insertion en Python moderne, et dict.fromkeys en construit un en utilisant les éléments de l'itérable comme clés — en fait un set ordonné.

Sous-ensembles et sur-ensembles

Vérifier si un set est contenu dans un autre :

main.py
Output
Click Run to see the output here.

Ceux-ci apparaissent dans des choses comme les vérifications de permissions (« cet utilisateur a-t-il tous les rôles requis ? »).

Ce qui peut aller dans un set

Seulement des éléments hashables. C'est un terme technique — en pratique, ça veut dire :

  • Les choses immuables sont hashables : nombres, chaînes, tuples de hashables, frozensets.
  • Les choses mutables ne le sont pas : listes, dicts, autres sets ne peuvent pas être membres d'un set.
main.py
Output
Click Run to see the output here.

Si tu as besoin d'un set de sets, utilise frozenset — c'est une version immuable de set.

L'itération est non ordonnée

Boucler sur un set te donne les éléments dans un ordre non garanti :

main.py
Output
Click Run to see the output here.

Lance ça plusieurs fois et tu verras l'ordre varier. Si l'ordre compte, un set n'est pas la bonne structure — trie le contenu quand tu en as besoin, ou utilise une liste.

Quand ne pas utiliser un set

Si l'un de ceux-là est vrai, une liste ou un dict est probablement un meilleur choix :

  • Tu te soucies de l'ordre.
  • Tu as besoin de stocker des doublons.
  • Chaque élément a des données associées (utilise un dict avec l'élément comme clé).

On avance

Les sets gèrent unicité et appartenance. Les dictionnaires — la suite — gèrent le motif plus large de « chercher une valeur par une clé », qui est probablement la structure de données non-liste la plus utile en Python.

Questions fréquentes

Qu'est-ce qu'un set en Python ?

Un set est une collection non ordonnée d'éléments uniques. Les sets utilisent des accolades sans paires clé-valeur : colors = {'red', 'green', 'blue'}. Ajouter la même valeur deux fois n'a aucun effet — les doublons sont silencieusement éliminés.

Quand utiliser un set plutôt qu'une liste ?

Utilise un set quand tu te soucies de l'unicité ou quand tu vas faire beaucoup de tests d'appartenance (x in collection). Les sets retirent les doublons automatiquement et vérifient l'appartenance en temps constant, ce qui pour de grandes collections est une énorme accélération par rapport aux listes.

Comment créer un set vide en Python ?

Utilise set(), pas {} — des accolades sans rien dedans créent un dictionnaire vide, pas un set vide. Une fois que tu as un set, tu peux ajouter des éléments avec .add(valeur).

Apprendre à coder avec Coddy

COMMENCER