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
inefficacement (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 | buniona & bintersectiona - bdifférence (éléments de a absents de b)a ^ bdiffé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
inquand on répète des tests d’appartenance - utiliser
discard(x)si vous ne voulez pas gérer l’exception quandxest 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
- dédoublonner une liste de mails et afficher le nombre puis les mails triés.
- trouver les tags communs entre deux articles (deux listes de chaînes).
- à partir de deux listes de prénoms, afficher ceux présents dans a mais pas dans b.
- vérifier si
set(b)est un sous-ensemble deset(a).