ensemble

Python

Anglais : set

Il y a deux types ensemble en Python, set et frozenset, le premier est mutable (modifiable), le second ne l'est pas.

Un ensemble est une collection :

  • non ordonnée ( ce n'est donc pas une séquence comme les listes, les tuples, ... et cela n'a pas de sens d'écrire s[i])
  • d'objets distincts (pas de doublon, pas deux éléments dans le même ensemble ayant même valeur)
  • "hashable" (un frozenset étant non modifiable, en plus d'être hashable, peut être utilisé comme clé d'une table de hash-code).

Etant une collection, un ensemble dispose des opérations suivantes :

  • x in set # test d’appartenance de x à set
len(set) # cardinalité de set, c'est à dire nombre d'éléments dans set
Et on peut itérer (pour chaque élément x appartenant à set)
for x in set :
print(x)

Créer un ensemble et l'initialiser

a) On peut tout d'abord créer un ensemble par extension, c'est à dire en listant les membres de l'ensemble :

grive = {'draine', 'mauvis', 'musicienne', 'litorne'}

# un ensemble de chaîne correspondant aux noms 4 espèces de grives que l'on trouve en Bretagne

piece_centime = {1, 2, 5, 10, 20, 50}

Rien n'interdit d'être bizarrement "hétérogène" :

{4, 'panais', 'carotte', 12, 'rutabaga'}

Et

{1,2,1,3,5,3} c'est l'ensemble {1, 2, 3, 5}. Pas de doublons, contrairement aux listes ou tuples.

On peut aussi créer un objet set par appel du constructeur :

Contrairement à d'autres langages , on ne précise quel est l'ensemble des valeurs que peut prendre un ensemble.

On peut aussi créer et initialiser un objet set avec la notation :

{'panais', 'carotte', 'rutabaga'}

b) On peut créer un ensemble en appelant un constructeur

  • class set([iterable])
  • class frozenset([iterable])
On peut créer un objet ensemble vide :
a = set()
ou à partir d'un itérable :
>>> lettres_de_fidamdoue = set ( lettres_de_fidamdoue)
>>> lettres_de_fidamdoue
>>>{'i','a','d','f','m','e','u','o'}

c) On peut aussi créer un ensemble par intension, en donnant un prédicat d'appartenance

>>>les_voyelles-de_fidamdoue = {x for x in lettres_de_fidamdoue if x in 'aeiouy'}
>>>les_voyelles-de_fidamdoue
>>>{'i','a','e','u','o'}

Et on peut même construire des ensembles d'ensembles!!!


Opérations sur les ensembles

== != < > <= >=

intersection & &=

union | |=

différence - -=

différence symétrique ^ ^=

Les méthodes

  • s.isdisjoint(other) Renvoie True si l'ensemble n'a pas d'éléments commun avec l'ensemble (ou, dis autrement, si leur intersection est l'ensemble vide) ;
  • s.issubset(other) (que l'on peut écrire set <= other) True si tous les éléments de s sont dans other ;
  • set < other True si set <= other et set != other ;
  • s. issuperset(other) (que l'on peut écrire set >= other) True si tous les éléments de other sont dans s ;
  • set > other True si set >= other et set != other ;
  • s.union(other, ...) (que l'on peut écrire s | other | ...) Renvoie un nouvel ensemble contenant tous les éléments des ensembles s, other, ... :
  • s.intersection(other, ...) (que l'on peut écrire s & other & ...) Renvoie un nouvel ensemble contenant les éléments qui sont dans chacun des ensembles s, other, ... ;
  • s.difference(other, ...) (que l'on peut écrire s - other - ...) Renvoie un nouvel ensemble contenant les éléments qui sont dans s mais pas dans other et ... ;
  • s.symmetric_difference(other) (que l'on peut écrire s ^ other) Renvoie un nouvel ensemble contenant les éléments qui sont dans s, dans other ou dans ..., mais pas dans deux ensembles ;
  • s. copy() Renvoie un ensemble construit par copie superficielle de s.

Opérations applicables uniquement sur les ensembles mutables

  • s.update(other, ...) (que l'on peut écrire s |= other | ...) Modifie s en ajoutant les éléments de other et ... ;
  • s.intersection_update(other, ...) (que l'on peut écrire s &= other & ...) Modifie s en ne gardant que les éléments qui sont présents dans chacun des ensembles s, other et ... ;
  • s.difference_update(other, ...) (que l'on peut écrire s -= other | ...) Modifie s en retirant les éléments qui sont dans other ou ... ;
  • s.symmetric_difference_update(other) (que l'on peut écrire s ^= other) Modifie s Renvoie un nouvel ensemble contenant les éléments qui sont dans s, dans other, dans ..., mais pas dans deux ensembles ;
  • s.add(elem) Add element elem to the set ;
  • s.remove(elem) Retire l'élément elem de s. Déclenche l'exception KeyError si elem n'est pas présent ;
  • s.discard(elem) Retire l'élément elem de s s'il est présent ;
  • s. pop() Retire et renvoie un élément arbitraire de l'ensemble s . Déclenche l'exception KeyError if s est vide ;
  • s.clear() Retire tous les éléments d'un ensemble.



» Glossaire du langage python