Maîtriser les ensembles Python : création, manipulation et opérations
Les ensembles Python
Découvrez comment le type de données set de Python simplifie la déduplication et les opérations ensemblistes. Ce guide couvre la création, modification, suppression et toutes les opérations essentielles sur les ensembles.
Vidéo : Les ensembles en Python
Un ensemble est une collection non ordonnée d'éléments uniques et immuables. Bien que l'ensemble lui-même soit mutable — permettant d'ajouter ou supprimer des éléments — ses éléments individuels doivent être hachables (ex. : nombres, chaînes, tuples).
Les ensembles Python supportent les opérations mathématiques d'ensembles comme l'union, l'intersection, la différence et la différence symétrique, les rendant idéaux pour la déduplication de données, les tests d'appartenance et l'algèbre ensembliste.
Créer des ensembles Python
Utilisez des accolades ou le constructeur intégré set() pour créer un ensemble. Les éléments peuvent être de tout type immuable, mais les types mutables comme les listes, dictionnaires ou autres ensembles ne peuvent pas être inclus.
# Exemple 1 : Ensembles avec différents types de données
# ensemble d'entiers
my_set = {1, 2, 3}
print(my_set)
# ensemble de types de données mixtes
my_set = {1.0, 'Bonjour', (1, 2, 3)}
print(my_set)
Sortie
{1, 2, 3} {1.0, (1, 2, 3), 'Bonjour'}
Remarquez comment les valeurs en double sont automatiquement supprimées et comment les tuples — étant immuables — sont acceptés.
# Suppression des doublons
my_set = {1, 2, 3, 4, 3, 2}
print(my_set)
# Construction d'un ensemble depuis une liste
my_set = set([1, 2, 3, 2])
print(my_set)
# Tenter d'inclure un élément mutable cause une erreur
# my_set = {1, 2, [3, 4]} # TypeError: unhashable type: 'list'
Sortie
{1, 2, 3, 4} {1, 2, 3} Traceback (most recent call last): File "<string>", line 15, in <module> my_set = {1, 2, [3, 4]} TypeError: unhashable type: 'list'
La création d'un ensemble vide nécessite le constructeur set() ; utiliser {} crée un dictionnaire vide à la place.
# Différencier ensemble et dictionnaire lors de la création de structures vides
a = {}
print(type(a))
a = set()
print(type(a))
Sortie
<class 'dict'> <class 'set'>
Modifier un ensemble en Python
Les ensembles sont mutables, mais ils ne supportent pas l'indexation ou le tranchage en raison de leur nature non ordonnée.
Utilisez add() pour insérer un seul élément et update() pour fusionner un autre itérable dans l'ensemble. Les entrées en double sont automatiquement ignorées.
# Exemple : Ajout d'éléments
my_set = {1, 3}
print(my_set)
# Tenter d'indexer un ensemble lève une erreur
# my_set[0] # TypeError: 'set' object does not support indexing
# Ajouter un seul élément
my_set.add(2)
print(my_set)
# Ajouter plusieurs éléments depuis une liste
my_set.update([2, 3, 4])
print(my_set)
# Combiner une liste et un autre ensemble
my_set.update([4, 5], {1, 6, 8})
print(my_set)
Sortie
{1, 3} {1, 2, 3} {1, 2, 3, 4} {1, 2, 3, 4, 5, 6, 8}
Supprimer des éléments d'un ensemble
Utilisez discard() pour supprimer un élément s'il existe, ou ne rien faire sinon. En revanche, remove() lève une KeyError quand l'élément est absent.
# Exemple : Discard vs remove
my_set = {1, 3, 4, 5, 6}
print(my_set)
my_set.discard(4)
print(my_set)
my_set.remove(6)
print(my_set)
my_set.discard(2)
print(my_set)
# Ce qui suit lèvera KeyError
# my_set.remove(2)
Sortie
{1, 3, 4, 5, 6} {1, 3, 5, 6} {1, 3, 5} {1, 3, 5} Traceback (most recent call last): File "<string>", line 28, in <module> KeyError: 2
La méthode pop() supprime et retourne un élément arbitraire, tandis que clear() vide l'ensemble entièrement.
# Exemple pop et clear
my_set = set("BonjourMonde")
print(my_set)
print(my_set.pop())
print(my_set)
my_set.clear()
print(my_set)
Sortie
{'H', 'l', 'r', 'W', 'o', 'd', 'e'} H {'r', 'W', 'o', 'd', 'e'} set()
Opérations sur les ensembles Python
Les ensembles Python supportent l'algèbre ensembliste classique : union, intersection, différence et différence symétrique. Celles-ci peuvent être invoquées via des opérateurs ou des méthodes dédiées.
Utilisons deux ensembles d'exemple :
A = {1, 2, 3, 4, 5}
B = {4, 5, 6, 7, 8}
Union

L'union de A et B combine tous les éléments distincts.
print(A | B)
Sortie
{1, 2, 3, 4, 5, 6, 7, 8}
Intersection

L'intersection retourne seulement les éléments communs aux deux ensembles.
print(A & B)
Sortie
{4, 5}
Différence

La différence A - B liste les éléments présents dans A mais pas dans B.
print(A - B)
Sortie
{1, 2, 3}
Différence symétrique

La différence symétrique A ^ B retourne les éléments qui sont dans l'un ou l'autre ensemble mais pas dans les deux.
print(A ^ B)
Sortie
{1, 2, 3, 6, 7, 8}
Méthodes supplémentaires des ensembles
Voici une référence rapide pour toutes les méthodes intégrées disponibles sur les objets set :
| Méthode | Description |
|---|---|
| add() | Ajoute un élément à l'ensemble |
| clear() | Supprime tous les éléments |
| copy() | Retourne une copie superficielle |
| difference() | Retourne un nouvel ensemble d'éléments présents dans l'appelant mais pas dans les autres |
| difference_update() | Suppression de différence sur place |
| discard() | Supprime l'élément s'il est présent ; pas d'erreur s'il est absent |
| intersection() | Retourne un nouvel ensemble d'éléments communs |
| intersection_update() | Mise à jour d'intersection sur place |
| isdisjoint() | True si les ensembles n'ont aucun élément en commun |
| issubset() | True si l'appelant est un sous-ensemble d'un autre ensemble |
| issuperset() | True si l'appelant contient entièrement un autre ensemble |
| pop() | Supprime et retourne un élément arbitraire ; KeyError si vide |
| remove() | Supprime l'élément ; KeyError s'il est absent |
| symmetric_difference() | Retourne un nouvel ensemble d'éléments exclusifs à chaque ensemble |
| symmetric_difference_update() | Mise à jour de différence symétrique sur place |
| union() | Retourne un nouvel ensemble contenant tous les éléments uniques |
| update() | Union sur place avec un autre itérable |
Test d'appartenance aux ensembles
Vérifiez l'existence d'un élément avec le mot-clé in.
my_set = set("pomme")
print('a' in my_set) # True
print('p' not in my_set) # False
Sortie
True False
Itérer sur un ensemble
Parcourez un ensemble avec une boucle for standard ; l'ordre n'est pas garanti.
for letter in set("pomme"):
print(letter)
Fonctions intégrées avec les ensembles
Des fonctions comme len(), max(), min(), sum(), all(), any() et sorted() fonctionnent parfaitement avec les ensembles. Voici un tableau des utilitaires courants :
| Fonction | Description |
|---|---|
| all() | True si tous les éléments sont truthy (ou si l'ensemble est vide) |
| any() | True si au moins un élément est truthy |
| enumerate() | Itère avec un index, utile pour le débogage |
| len() | Nombre d'éléments |
| max() | Plus grand élément |
| min() | Plus petit élément |
| sorted() | Retourne une liste triée depuis l'ensemble |
| sum() | Somme de tous les éléments numériques |
Frozenset Python
Un frozenset est un homologue immuable d'un ensemble. Une fois créé, ses éléments ne peuvent pas changer, le rendant hachable et utilisable comme clé de dictionnaire.
A = frozenset([1, 2, 3, 4])
B = frozenset([3, 4, 5, 6])
Les opérations supportées reflètent celles des ensembles réguliers, sauf pour les méthodes de mutation.
print(A.isdisjoint(B))
print(A.difference(B))
print(A | B)
# Tenter d'ajouter un élément lève une AttributeError
# A.add(3) # AttributeError: 'frozenset' object has no attribute 'add'
Python
- Maîtriser les types de données Python : Guide pratique
- Maîtriser les opérateurs Python : Guide complet
- Maîtriser l'instruction pass en Python : Guide pratique
- Maîtriser les arguments de fonctions Python : Positionnels, nommés et paramètres par défaut
- Maîtriser les dictionnaires Python : création, manipulation et techniques avancées
- Maîtriser les itérateurs Python : fonctionnement et création des vôtres
- Les fermetures Python expliquées : comment les fonctions imbriquées capturent les variables
- Maîtriser Python datetime : guide pratique pour les dates, heures et fuseaux horaires
- Python : Aperçu - Langage de haut niveau, lisible, interactif et orienté objet