Historique de la question :
Le type set (ensemble) a été ajouté dans Python 2.4 et fournit un moyen pratique et rapide de stocker des éléments uniques et immuables, avec le support d'opérations théoriques sur les ensembles (union, intersection, etc.). Les ensembles sont implémentés sur la base de tables de hachage.
Problème : Beaucoup d'utilisateurs n'ont pas de compréhension de la différence entre set et list, des spécificités de stockage des éléments dans un set (désordre, seulement des objets hashables), ainsi que des nuances d'utilisation des ensembles pour optimiser la recherche, vérifier l'unicité ou travailler avec de grands ensembles de données.
Solution :
Set — un conteneur mutable et non ordonné d'objets uniques et hashables. Il prend en charge des opérations rapides de recherche d'appartenance, d'union, d'intersection, de différence et de différence symétrique. Méthodes intégrées : add, remove, discard, update, intersection, difference, union, symmetric_difference, et d'autres.
Exemple de code :
nums = {1, 3, 5, 7} nums.add(9) nums.update([5, 10]) # 5 est déjà présent, seul 10 sera ajouté other = {3, 9, 11} inter = nums & other # intersection {3, 9} # Vérification d'appartenance — plus rapide qu'avec list y = 11 if y in nums: print('Présent!')
Caractéristiques clés :
in est incroyablement rapide (O(1) en moyenne), contrairement à la liste (O(n)).Peut-on ajouter une liste ou un autre set dans un set ?
Réponse : Non, impossible. Seuls les objets hashables (immuables) sont autorisés : chaînes, nombres, tuples. Les listes et les ensembles — sont mutables, il est donc impossible de les ajouter.
Exemple de code :
s = set() s.add([1, 2]) # TypeError: type 'list' non hashable s.add((1, 2)) # OK
Quelle est la différence entre la méthode remove et discard d'un set ?
Réponse : remove(value) génère une exception KeyError si la valeur n'est pas trouvée. discard(value) ne fait rien en silence si cet élément n'existe pas.
Exemple de code :
s = {1, 2, 3} s.remove(4) # KeyError s.discard(4) # Pas d'erreur
Un ensemble vide {} est-il un objet set ?
Réponse : Non. Le littéral {} est toujours un dict vide. Pour créer un set vide, il faut utiliser la fonction set().
Exemple de code :
empty_set = {} # Ceci est un dict empty_set_real = set() # Ceci est un set
Cas négatif
Tentent de stocker des objets uniques dans une liste et de faire des vérifications via "in" pour rechercher des doublons lors de gros volumes de données.
Avantages :
Inconvénients :
Cas positif
Utilisent un set pour rechercher des intersections et des données uniques dans de grands tableaux (par exemple, des envois d'e-mails), sans que des doublons se produisent et avec une opération rapide.
Avantages :
Inconvénients :