Python - Ensembles

Bonjour, aspirants programmeurs Python !aujourd'hui, nous allons plonger dans le merveilleux monde des ensembles Python. En tant que votre enseignant de sciences informatiques de quartier, je suis excité de vous guider à travers ce voyage. Alors, prenez votre boisson préférée, mettez-vous à l'aise, et explorons les ensembles ensemble !

Python - Sets

Ensembles en Python

Imaginez que vous avez un sac de billes colorées. Chaque bille est unique, et vous ne vous souciez pas de l'ordre dans lequel elles sont - vous voulez simplement savoir quelles couleurs vous avez. C'est essentiellement ce qu'est un ensemble en Python !

Un ensemble est une collection non ordonnée d'éléments uniques. C'est comme un ensemble mathématique : pas de doublons autorisés, et l'ordre n'a pas d'importance. Les ensembles sont extrêmement utiles lorsque vous avez besoin de stocker des éléments uniques ou d'effectuer des opérations sur les ensembles comme l'union, l'intersection et la différence.

Création d'un Ensemble en Python

Commençons par créer notre premier ensemble. Il y a deux principales méthodes pour créer un ensemble en Python :

  1. Utiliser des accolades {}
  2. Utiliser le constructeur set()

Voici un exemple des deux méthodes :

# Méthode 1 : Utiliser des accolades
fruits = {'pomme', 'banane', 'cerise'}

# Méthode 2 : Utiliser le constructeur set()
couleurs = set(['rouge', 'vert', 'bleu'])

print(fruits)
print(couleurs)

Sortie :

{'cerise', 'pomme', 'banane'}
{'bleu', 'rouge', 'vert'}

Notez comment l'ordre des éléments dans la sortie peut être différent de celui que nous avons défini. C'est parce que les ensembles sont non ordonnés !

Éléments Dupliqués dans un Ensemble

Souvenez-vous quand je vous disais que les ensembles ne contiennent que des éléments uniques ? Voyons ce qui se passe lorsque nous essayons d'ajouter des doublons :

nombres = {1, 2, 3, 2, 4, 3, 5}
print(nombres)

Sortie :

{1, 2, 3, 4, 5}

Comme vous pouvez le voir, Python supprime automatiquement les doublons pour nous. N'est-ce pas génial ?

Ajout d'Éléments dans un Ensemble

Pour ajouter un seul élément à un ensemble, nous utilisons la méthode add(). Si nous voulons ajouter plusieurs éléments à la fois, nous utilisons la méthode update().

# Ajout d'un seul élément
fruits.add('orange')
print(fruits)

# Ajout de plusieurs éléments
fruits.update(['raisin', 'mangue'])
print(fruits)

Sortie :

{'cerise', 'pomme', 'banane', 'orange'}
{'cerise', 'mangue', 'pomme', 'banane', 'orange', 'raisin'}

Suppression d'Éléments d'un Ensemble

Il y a plusieurs moyens de supprimer des éléments d'un ensemble. Explorons-les :

# Utiliser remove() - lève une erreur si l'élément n'existe pas
fruits.remove('banane')

# Utiliser discard() - ne lève pas d'erreur si l'élément n'existe pas
fruits.discard('kiwi')

# Utiliser pop() - supprime et renvoie un élément arbitraire
popped = fruits.pop()
print(f"Élément éjecté : {popped}")

# Utiliser clear() - supprime tous les éléments
fruits.clear()

print(fruits)

Sortie :

Élément éjecté : cerise
set()

Test de Membership dans un Ensemble

L'un des grands avantages des ensembles est qu'ils permettent des tests de membership très rapides. Nous pouvons utiliser le mot-clé in pour vérifier si un élément existe dans un ensemble :

nombres = {1, 2, 3, 4, 5}
print(3 in nombres)  # True
print(6 in nombres)  # False

Cette opération est beaucoup plus rapide avec les ensembles que avec les listes, surtout pour de grandes collections !

Opérations sur les Ensembles

Les ensembles en Python supportent diverses opérations sur les ensembles mathématiques. Regardons quelques-unes d'entre elles :

ensemble1 = {1, 2, 3, 4, 5}
ensemble2 = {4, 5, 6, 7, 8}

# Union
print(ensemble1 | ensemble2)  # ou ensemble1.union(ensemble2)

# Intersection
print(ensemble1 & ensemble2)  # ou ensemble1.intersection(ensemble2)

# Différence
print(ensemble1 - ensemble2)  # ou ensemble1.difference(ensemble2)

# Différence Symétrique
print(ensemble1 ^ ensemble2)  # ou ensemble1.symmetric_difference(ensemble2)

Sortie :

{1, 2, 3, 4, 5, 6, 7, 8}
{4, 5}
{1, 2, 3}
{1, 2, 3, 6, 7, 8}

Compréhensions d'Ensembles en Python

Tout comme les compréhensions de listes, Python supporte également les compréhensions d'ensembles. Elles fournissent une manière concise de créer des ensembles basés sur des objets itérables existants.

# Création d'un ensemble de carrés de nombres de 0 à 9
carrés = {x**2 for x in range(10)}
print(carrés)

Sortie :

{0, 1, 4, 9, 16, 25, 36, 49, 64, 81}

Filtrage d'Éléments Utilisant les Compréhensions d'Ensembles

Nous pouvons également utiliser les compréhensions d'ensembles pour filtrer des éléments :

# Création d'un ensemble de carrés pairs de 0 à 9
carrés_pairs = {x**2 for x in range(10) if x % 2 == 0}
print(carrés_pairs)

Sortie :

{0, 4, 16, 36, 64}

Compréhensions d'Ensembles Imbriquées

Bien que moins courantes, les compréhensions d'ensembles imbriquées sont également possibles :

# Création d'un ensemble de paires (x, y) où x et y sont des digits
paires_de_chiffres = {(x, y) for x in range(3) for y in range(3)}
print(paires_de_chiffres)

Sortie :

{(0, 1), (1, 2), (0, 0), (2, 0), (1, 1), (2, 2), (0, 2), (2, 1), (1, 0)}

Ensembles Figés

Enfin, parlons des ensembles figés. Un ensemble figé est une version immuable d'un objet ensemble Python. Alors que les éléments d'un ensemble peuvent être modifiés à tout moment, les éléments d'un ensemble figé restent les mêmes après leur création.

ensemble_normal = {1, 2, 3}
ensemble_fige = frozenset([1, 2, 3])

ensemble_normal.add(4)  # Cela fonctionne
# ensemble_fige.add(4)  # Cela lèverait une AttributeError

Les ensembles figés sont particulièrement utiles lorsque vous avez besoin d'un ensemble immuable, comme l'utiliser comme clé de dictionnaire.

Et voilà, les amis ! Nous avons couvert tous les aspects des ensembles Python. Souvenez-vous, la pratique fait le maître, alors n'hésitez pas à expérimenter avec ces concepts. Bon codage !

Voici un tableau résumant les principales méthodes d'ensemble que nous avons discutées :

Méthode Description
add() Ajoute un élément à l'ensemble
update() Ajoute plusieurs éléments à l'ensemble
remove() Supprime un élément spécifique de l'ensemble (lève une erreur si non trouvé)
discard() Supprime un élément spécifique de l'ensemble (pas d'erreur si non trouvé)
pop() Supprime et renvoie un élément arbitraire de l'ensemble
clear() Supprime tous les éléments de l'ensemble
union() Renvoie un ensemble contenant l'union des ensembles
intersection() Renvoie un ensemble contenant l'intersection des ensembles
difference() Renvoie un ensemble contenant la différence des ensembles
symmetric_difference() Renvoie un ensemble avec des éléments dans l'un ou l'autre ensemble, mais pas les deux

Credits: Image by storyset