L'ensemble (set) est le cousin du dictionnaire
Exercice supplémentaire · niveau 3 (difficile) · NSI (première), chapitre 5 — Les dictionnaires · Aux frontières du programme
Énoncé
L'ensemble (set) est le cousin du dictionnaire : des clés, sans valeurs. Mesurer le temps de tests d'appartenance dans un ensemble de éléments et dans la liste correspondante.
Corrigé
mots = ["chat", "chien", "chat", "souris"]
assert set(mots) == {"chat", "chien", "souris"} # les doublons fondent
assert len(set(mots)) == 3
a, b = {1, 2, 3}, {3, 4}
assert a & b == {3} # intersection
assert a | b == {1, 2, 3, 4} # union
assert a - b == {1, 2} # difference
La mesure.
grand, liste = set(range(200000)), list(range(200000))
t0 = time.perf_counter()
[199999 in grand for _ in range(1000)]
t_set = time.perf_counter() - t0 # 0,00003 s
t0 = time.perf_counter()
[199999 in liste for _ in range(1000)]
t_liste = time.perf_counter() - t0 # 0,66 s
Un rapport de l'ordre de — et la cible a été choisie en dernière position de la liste, c'est-à-dire dans le pire cas du parcours. C'est la même différence de nature qu'entre dictionnaire et tableau, pour la même raison : la position est calculée, pas cherchée.
Quand choisir un ensemble. Dès que la question est « cet élément y est-il ? » et qu'aucune valeur ne l'accompagne : dédoublonner, tester une appartenance, comparer deux collections. Les opérations &, |, - reprennent exactement les notations mathématiques de l'intersection, de l'union et de la différence.
Les autres exercices de ce chapitre Le cours du chapitre
Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.