Leçons du module (4/4)
Ensembles
Un set (ensemble) est une collection d'éléments uniques et non ordonnés. Trois superpouvoirs :
- Déduplication automatique : ajouter le même élément deux fois n'a aucun effet.
- Test d'appartenance O(1) :
x in sest extrêmement rapide, même avec des millions d'éléments (basé sur le hash, comme les dictionnaires). - Opérations sur les ensembles : union, intersection, différence, différence symétrique.
Créer un set
vuoto = set() # ATTENTION : {} est un dict vide, pas un set !
numeri = {1, 2, 3}
da_lista = set([1, 1, 2, 3, 3, 3]) # {1, 2, 3}Les accolades seules {} créent un dictionnaire vide, pas un ensemble : pour un ensemble vide,
vous devez utiliser set().
Modifier un set
s = {1, 2, 3}
s.add(4) # {1, 2, 3, 4}
s.add(1) # aucun effet (déjà présent)
s.discard(99) # supprime si présent, silencieux sinon
s.remove(2) # supprime ou lève KeyErrorOpérations sur les ensembles
a = {1, 2, 3, 4}
b = {3, 4, 5, 6}
a | b # {1, 2, 3, 4, 5, 6} union
a & b # {3, 4} intersection
a - b # {1, 2} différence (dans a mais pas dans b)
a ^ b # {1, 2, 5, 6} différence symétrique (xor)Il existe également des formes de méthodes (a.union(b), a.intersection(b), …) qui
acceptent en outre tout itérable, pas seulement des sets.
Test d'appartenance
parole = {"ciao", "mondo", "python"}
"ciao" in parole # True O(1)
"java" not in parole # TruePour comparaison : la recherche avec in dans une list est en O(n) et sur des listes
longues, elle est beaucoup plus lente.
Frozen set : la version immuable
frozenset({1, 2, 3}) est la version hashable : elle peut être une clé de dictionnaire ou un
élément d'un autre ensemble.
Opérations sur les ensembles et performances
Les sets sont implémentés sous forme de tables de hachage, ce qui rend le test d'appartenance (x in mon_ensemble) extrêmement rapide : il s'exécute en temps constant O(1), contrairement aux listes où la recherche prend un temps linéaire O(n). De plus, ils prennent en charge des opérations algébriques comme l'union (|), l'intersection (&) et la différence (-).
À vous de jouer
Étant donné la liste `nums = [1, 2, 2, 3, 3, 3, 4]`, construisez `unique_items` avec les valeurs uniques (dans n'importe quel ordre) puis calculez `count` comme len(unique_items). Évaluez `count`.
Afficher l'indice
set(nums) supprime les doublons.
Solution disponible après 3 tentatives
Exercice de révision
Étant donné `a = {1, 2, 3, 4}` et `b = {3, 4, 5, 6}`, calculez l'intersection dans `common_items` et la différence a-b dans `only_a`. Évaluez le tuple `(common_items, only_a)`.
Afficher l'indice
& intersection, - différence.
Solution disponible après 3 tentatives
Défi supplémentaire
Étant donné deux sets `set_a = {1, 2, 3}` et `set_b = {2, 3, 4}`, calculez l'intersection mathématique des deux sets (leurs éléments communs). Enregistrez le set résultant dans `common_elements` et évaluez-le.
Afficher l'indice
Vous pouvez utiliser l'opérateur & ou la méthode set_a.intersection(set_b).
Solution disponible après 3 tentatives