Ensembles

Les objets de type “ensemble” (set dans le language Python) sont des structures de données qui modélisent la notion mathématique d’ensemble. Un ensemble (au sens Python) peut contenir des valeurs de type quelconque (mais ce type doit être “hashable” : dans la pratique, cela exclut les listes, les dictionnaires et les ensembles), et une même valeur ne peut apparaître qu’une seule fois. De plus les éléments d’un objet de type ensemble ne sont pas ordonnés (on ne peut pas y accéder par un indice : on peut juste savoir si une valeur est ou n’est pas élément de l’ensemble).

On forme un ensemble par la séquence de ses éléments (valeurs), encadrée par { et }, ou en utilisant le constructeur set (appliqué à un itérable quelconque).

Les objets de type “ensemble” sont mutables. Voici quelques méthodes applicables à un objet ens de type ensemble (set). On note elt une valeur susceptible d’appartenir ou d’être ajoutée à l’ensemble ens :

len(ens) renvoie le cardinal (le nombre d’éléments) de l’ensemble
ens.add(elt) ajoute un élément à un ensemble
ens.remove(elt)
ens.discard(elt)
retire un élément à un ensemble (KeyError si élément absent)
retire un élément à un ensemble s’il y est effectivement (pas d’erreur sinon)
elt in ens renvoie True si l’élément est présent dans l’ensemble, False sinon
elt not in ens renvoie True si l’élément est absent de l’ensemble, False sinon
ens.clear() efface le contenu de l’ensemble
ens.copy() renvoie une copie de l’ensemble, indépendante de l’original
ens.pop() renvoie et supprime un élement arbitraire de l’ensemble (KeyError si ensemble vide)

On continue sur la lancée de l’exemple précédent (avec l’ensemble e = {1, 2, 3, 5, 7}) :

Les objets de type “ensemble” ont des méthodes pour les opérations ensemblistes usuelles :

ens1.isdisjoint(ens2) renvoie True si ens1 et ens2 sont disjoints
ens1 <= ens2 renvoie True si ens1 est inclus dans ens2
ens1 < ens2 renvoie True si ens1 est strictement inclus dans ens2
ens1 >= ens2 renvoie True si ens1 contient ens2
ens1 > ens2 renvoie True si ens1 contient strictement ens2
ens1 | ens2 réunion de ens1 et ens2
ens1 & ens2 intersection de ens1 et ens2
ens1 - ens2 différence de ens1 et ens2
ens1 ^ ens2 différence symétrique de ens1 et ens2

Voici quelques exemples (on voit que l’ordre des éléments d’un ensemble est imprévisible) :

On dispose aussi d’opérations avec assignation permettant de modifier facilement un ensemble.

ens1 |= ens2 remplace ens1 par la réunion des deux ensembles ens1 &= ens2 remplace ens1 par leur intersection
ens1 -= ens2 remplace ens1 par leur différence ens1 ^= ens2 remplace ens1 par leur différence symétrique

En reprenant les ensembles m7 et m3 précédents, on illustre le caractère mutable des objets de type ensemble :

Remarque : Python propose également le type frozenset, pour modéliser les ensembles non mutables. Les objets de type frozenset sont donc des ensembles “gelés”, dont on ne peut pas modifier le contenu ni la longueur (à moins de redéfinir l’objet complètement). Ils disposent des méthodes des objets de type set (sauf ceux qui ont trait à la mutabilité, bien sûr). On pourra se reporter à http://docs.python.org/3.3/library/stdtypes.html#frozenset

Retour à l’accueil du cours Python/Numpy

Sommaire du chapitre 6

  1. Dictionnaires
  2. Ensembles
  3. Itérateurs
  4. Fonctions utiles sur les itérateurs
  5. Générateurs (instruction yield)
  6. Fichiers