Découverte de la structure d'ensembles en Python
Un ensemble en python (*set*) est une structure pouvant contenir plusieurs données, mais contrairement aux listes, ces données sont uniques et non ordonnées. Il n'y a pas de moyen d'accéder à une donnée en particulier en utilisant son numéro d'index.
Les ensembles sont par contre extrèmement efficaces pour la recherche d'un élément : Contrairement aux listes dans lesquelles une recherche impose de parcourir tous les éléments, les ensembles utilisent des techniques d'optimisation (table de hachage) rendant la recherche très performante.
Voici quelques illustrations de l'utilisation des *set*
# créer un un ensemble
ensemble = {1,5,9,5,1,2,4}
ensemble
Comme on peut le voir, les éléments en doubles dans ensemble ont été éliminés et l'ordre affiché n'est pas celui dans lequel les éléments ont été saisis.
# essayons quelque chose...
ensemble[3]
l'accès aux éléments par indice comme pour les listes n'est pas possible, cela n'a tout simpliement pas de sens.
liste = [1,5,9,5,1,2,4]
ensemble = set(liste)
ensemble
ensemble = {1, 9, 5, 4, 2}
liste = list(ensemble)
liste
ensemble = {1, 9, 5, 4, 2}
ensemble.add(18)
ensemble.remove(9)
ensemble
Attention de bien tester si un élément est dans l'ensemble avant la suppression car sinon...
ensemble.remove(3)
et du coup ...
3 in ensemble
18 in ensemble
# l'ensemble vide est noté {} ou set()
vide = set()
vide.add(3)
vide.remove(3)
# Calculer le nb d'éléments d'un ensemble
len(vide)
Créer une fonction ensembleCarres prenant en paramètre un entier $n$ e renvoyant un ensemble contenant les carrés des entiers de 1 à $n$
def ensembleCarres(n):
# YOUR CODE HERE
raise NotImplementedError()
ec = ensembleCarres(10)
assert len(ec)==10
assert 64 in ec
# YOUR CODE HERE
raise NotImplementedError()
Comparez les temps de recherche d'un même nombre dans l'ensemble et dans la liste.
%%time
assert 874466246641 in s
%%time
assert 874466246641 in l
s.isdisjoint(s2)
s.issubset(s2)
s.issuperset(s2)
s <= s2 : inclusion (pareil avec s >= s2).
s < s2 : inclusion stricte (pareil avec s >= s2).
set.union(s1, s2, s3) : renvoie la réunion de plusieurs sets.
set.intersection(s1, s2, s3) : renvoie l'intersection de plusieurs sets
Créer une fonction ensembleCubes prenant en paramètre un entier $n$ e renvoyant un ensemble contenant les cubes des entiers de 1 à $n$
def ensembleCubes(n):
# YOUR CODE HERE
raise NotImplementedError()
assert 27 in ensembleCubes(10)
En déduire en une ligne de python combien de nombres entre 1 et 100 sont à la fois des carrés et des cubes
# Tapez votre ligne dans la cellule ci-dessous
# Attention, pas plus d'une ligne de Python !!