Dans les programmes scolaires français du lycée, il est question d’ensembles dès la classe de Seconde, et il est question de Python. On a l’habitude de représenter les ensembles par des listes ou des dictionnaires, mais il existe un autre type pouvant être utile : le type set.
Ensembles en Python: type “set”
Ce type d’objet est un peu spécial par rapport aux listes et aux dictionnaires: c’est un mélange des deux du point de vue syntaxique.
On peut déclarer un ensemble de la manière suivante:
E = {'1','2','3'}
ou encore:
E = set('123')
Ces deux façons de déclarer E donne le même résultat :
>>> E
{'1','2','3'}
Remarquez alors que les éléments de l’ensemble sont de type string. Pour avoir un ensemble de nombres, il faudra utiliser la première syntaxe:
E = {1,2,3}
>>> E
{1, 2, 3}
Les méthodes importantes associées au type “set”
Nous allons partir d’un ensemble vide E :
E = set()
Ensembles en Python: ajouter un élément: add()
E.add(1)
Ici, on ajoute le nombre 1 à l’ensemble. Donc on a maintenant :
>>> E
{1}
Vider l’ensemble: clear()
E.clear()
À ce stade, il n’y a plus rien dans E: on est revenu à l’ensemble vide.
Pour les besoins de la suite, nous allons construire l’ensemble des nombres pairs de 0 à 20:
E = set( 2*k for k in range(11) )
>>> E
{0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20}
Ensembles en Python: supprimer le premier élément: pop()
E.pop()
>>> E
{2, 4, 6, 8, 10, 12, 14, 16, 18, 20}
Réunion de deux ensembles: union()
Pour les besoins de ce paragraphe, je vais d’abord construire l’ensemble des multiples de 3 de 0 à 20:
F = set( 3*k for k in range(7) )
>>> F
{0, 3, 6, 9, 12, 15, 18}
Pour obtenir la réunion des ensembles E et F, on écrit:
U = E.union(F)
>>> U
{2, 4, 6, 8, 10, 12, 14, 16, 18, 20}
Intersection de deux ensembles: intersection()
R = E.intersection(F)
>>> R
{18, 12, 6}
Supprimer un élément: discard()
E.discard(10)
>>> E
{2, 4, 6, 8, 12, 14, 16, 18, 20}
Différence de deux ensembles: difference()
D = E.difference(F) # ensemble E auquel on a enlevé tous les éléments de F DD = F.difference(E) # ensemble F auquel on a enlevé tous les éléments de E
>>> D
{2, 4, 8, 14, 16, 20}
>>> DD # ensemble F auquel on a enlevé tous les éléments de E
{0, 9, 3, 15}
La différence symétrique (jointure d’exclusion): symmetric_difference()
S = E.symmetric_difference(F)
>>> S
{0, 2, 3, 4, 8, 9, 14, 15, 16, 20}
La jointure d’exclusion de E et F est l’ensemble des éléments qui sont dans E ou dans F, mais pas dans leur intersection.
On peut aussi utiliser la syntaxe suivante:
>>> S = E ^ F
Ensembles en Python: ajouter plusieurs éléments: update()
X = {1,2,3,4,5} Y = {50,60,70,80} X.update(Y)
>>> X
{1, 2, 3, 4, 5, 70, 80, 50, 60}
Les tests
Est-ce un sous-ensemble ? issubset()
>>> F.issubset(E)
False
En effet, F n’est pas un sous-ensemble de E.
Les deux ensembles sont-ils disjoints ?
>>> E.isdisjoint(F)
False
En effet, nos ensembles E et F ne sont pas ici disjoints car ils ont des éléments en commun.
Ce type est en complément de ce que l’on peut voir au lycée (voir cette page par exemple).
Cela me semble très pratique pour apprendre qu’on démontre l’égalité de deux ensembles par double inclusion. J’éviterais de présenter la méthode pop() aux élèves, bien que pratique en programmation, le concept général de premier élément d’un ensemble n’existe pas en mathématiques.
La notion de “set” en Python est-elle dans un des programmes ? Je ne l’ai pas vue.