Retour au cours

ensembles (set) : ensembles, opérations ensemblistes

les sets stockent des éléments uniques sans ordre, excellents pour tests d’appartenance rapides et opérations ensemblistes.

objectifs

  • créer des sets et ajouter/retirer des éléments
  • utiliser in efficacement (appartenance)
  • faire | union, & intersection, - différence, ^ différence symétrique
  • dédoublonner des séquences et comparer des collections

explication détaillée

un set élimine automatiquement les doublons. l’ordre d’itération n’est pas garanti. éléments requis hashables (donc pas de listes, mais tuples oui). opérations clés :

  • a | b union
  • a & b intersection
  • a - b différence (éléments de a absents de b)
  • a ^ b différence symétrique (dans l’un ou l’autre, pas les deux) méthodes utiles : add, discard (ne lève pas), remove (lève), update, intersection_update, etc.

exemples exécutables

s = {1, 2, 3}
s.add(2)
s.add(4)
print(s)        # {1, 2, 3, 4}
print(2 in s)   # True
a, b = {1,2,3}, {3,4,5}
print(a | b)  # union
print(a & b)  # inter
print(a - b)  # diff
print(a ^ b)  # diff symétrique
# dédoublonnage simple
items = ["a", "b", "a", "c", "b"]
unique = set(items)
print(unique)
# comparer deux listes rapidement
l1 = ["user1", "user2", "user3"]
l2 = ["user2", "user4"]
only_l1 = set(l1) - set(l2)
print(only_l1)  # {'user1', 'user3'}
# construire à partir de compréhension
squares_even = {n*n for n in range(10) if n % 2 == 0}
print(squares_even)

bonnes pratiques

  • convertir en set pour accélérer in quand on répète des tests d’appartenance
  • utiliser discard(x) si vous ne voulez pas gérer l’exception quand x est absent
  • convertir en liste triée pour afficher/déboguer

pièges courants

  • penser que l’ordre est stable → non
  • insérer des objets non hashables (listes/dicts) → TypeError
  • comparer des sets quand l’ordre compte → utilisez une liste triée

exercices

  1. dédoublonner une liste de mails et afficher le nombre puis les mails triés.
  2. trouver les tags communs entre deux articles (deux listes de chaînes).
  3. à partir de deux listes de prénoms, afficher ceux présents dans a mais pas dans b.
  4. vérifier si set(b) est un sous-ensemble de set(a).