Introduction aux ensembles avec Python
La notion mathématique d’ensemble est aussi celle Python. Cette page ne devrait donc pas vous surprendre. D’un autre côté, elle n’est pas faite pour ça. Ce n’est pas une vidéo TikTok.
Syntaxe
En extension, un ensemble de Python s’écrit entre accolades (comme en maths).
E = {1,3,5,7,9}
poissons = {"requin gris","raie manta"}
L’ordre n’a aucune importance. Par conséquent, si vous demandez d’afficher le énième élément d’un ensemble, Python vous enverra promener.
Pour connaître le nombre d’éléments d’un ensemble, on emploie la fonction len bien connue.
len (poissons)
On obtient : 2
Les éléments peuvent être hétérogènes.
H = {1,2,’requin gris’}
Pour tester si un élément appartient à un ensemble :
Avec 3 in E on obtient True et avec 4 in E on obtient False.
Petite différence avec les maths, l’ensemble vide n’est pas {} mais set().
L’ensemble est modifiable. Ainsi pour ajouter l’élément 11 à \(E\) :
E.add(11)
Pour lui ôter l’élément 1 :
E.remove(1)
Construction à partir d’une liste
liste = [1,5,6,1,6,8,9]
ensemble = set(liste)
Vérifions. L’instruction ensemble permet bien d’obtenir {1,5,6,8,9}
Un ensemble peut aussi s’écrire en compréhension.
prix = {1.20,2.55}
ttc = {x * 1.2 for x in prix}
ttc
On obtient : {3.06, 1.44}
Opérations sur les ensembles
Voyons quelques opérations sur les ensembles. Le résultat obtenu sera un autre ensemble.
jardin_a = {"mésange","merle","moineau","grive"}
jardin_b = {"merle","rouge-gorge", "pie"}
Union :
jardin_a | jardin_b
On obtient : {'mésange', 'rouge-gorge', 'pie', 'grive', 'moineau', 'merle'}
Intersection :
jardin_a & jardin_b
On obtient : {'merle'}
Différence
jardin_a - jardin_b
On obtient : {'mésange', 'grive', 'moineau'}
Le ou exclusif
jardin_a ^ jardin_b
Pour obtenir : {'rouge-gorge', 'moineau', 'mésange', 'grive', 'pie'}
Exercice
Soit l’ensemble suivant : \(E = {1,2,3,8,12,15,16,19}\)
Écrire un script en Python pour obtenir le sous-ensemble \(M \in E\) des éléments inférieurs à 10 et \(N\) qui est son complémentaire. Vérifier que l’union des deux sous-ensembles est bien égale à \(E\) et que leur intersection est nulle.
Écrire un script en Python pour obtenir le sous-ensemble \(P \in E\) des éléments pairs et \(I\) qui est son complémentaire.
Vérifier que l’intersection des deux sous-ensembles complémentaires (\(N\) et \(I\)) est égale au complémentaire de l’union des sous-ensembles \(M\) et \(P\) (loi de De Morgan).
Corrigé
E = {1,2,3,8,12,15,16,19}
M = {x for x in E if x < 10}
N = E – M
P = {x for x in E if x % 2 == 0}
I = E – P
# Vérification des quatre sous-ensembles en extension
M,N,P,I
On obtient un p-uplet d’ensembles :
({8, 1, 2, 3}, {16, 19, 12, 15}, {8, 16, 2, 12}, {19, 1, 3, 15})
# Intersection de N et I
N & I
On obtient {19, 15}.
# Union des sous-ensembles M et P = M|P, donc le complémentaire est…
E - (M|P)
On obtient à nouveau {19, 15}.
Attention, si l’on avait écrit E - M|P Python aurait d’abord soustrait \(M\) de \(E\) (et donc obtenu \(N\)) et donc procédé à l’union de \(N\) et de \(P.\)