Les ensembles avec Python

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"}

raie et requin

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'}

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.\)

 

lettre C