Accéder aux éléments d'un ensemble
Apprenez à accéder aux éléments d'un ensemble Python par itération, test d'appartenance et conversion, avec des exemples clairs.
Les ensembles Python sont des collections non ordonnées d'éléments uniques. Comme les ensembles ne garantissent aucun ordre, ils ne prennent pas en charge l'indexation, le découpage ni aucun autre accès de type séquence. Ce chapitre couvre toutes les techniques pratiques pour lire des éléments d'un ensemble : itération, test d'appartenance, conversion en liste, et quelques schémas réels illustrant pourquoi chaque approche est utile.
Pourquoi vous ne pouvez pas indexer un ensemble
Tenter d'accéder à un élément d'un ensemble par sa position lève immédiatement une TypeError :
L'indexation d'un ensemble lève une TypeError
C'est voulu. Les ensembles stockent leurs éléments dans une table de hachage, et non dans une séquence, il n'existe donc pas de « première » ou de « deuxième » position stable. L'ordre que vous observez en affichant un ensemble peut changer entre les versions de Python et même d'une exécution à l'autre.
Itérer sur un ensemble
La façon habituelle de parcourir chaque élément est une boucle for. Comme l'ordre n'est pas garanti, les éléments peuvent apparaître dans n'importe quel ordre à chaque exécution de la boucle.
Itérer sur chaque élément d'un ensemble
Résultat typique (l'ordre peut varier) :
cherry
banana
appleCollecter des résultats pendant l'itération
Vous pouvez construire une nouvelle liste de valeurs transformées pendant l'itération :
Construire une liste de fruits en majuscules à partir d'un ensemble
my_set = {"apple", "banana", "cherry"}
upper_fruits = [item.upper() for item in my_set]
print(upper_fruits) # e.g. ['CHERRY', 'BANANA', 'APPLE']La compréhension de liste fonctionne car elle demande à l'ensemble de fournir un élément à la fois — aucun index n'est requis.
Test d'appartenance avec in et not in
Le moyen le plus rapide et le plus courant de vérifier si une valeur existe dans un ensemble est l'opérateur in. Comme les ensembles reposent sur une table de hachage, cette vérification s'exécute en temps moyen O(1) — bien plus rapide que de parcourir une liste.
Vérifier si un élément est dans un ensemble
Utilisez not in pour tester l'absence :
Vérifier si un élément est absent d'un ensemble
fruits = {"apple", "banana", "cherry"}
search = "mango"
if search not in fruits:
print(f"{search} is not in the collection")
# mango is not in the collectionExemple pratique : dédupliquer et filtrer une liste
Un schéma courant combine les ensembles et le test d'appartenance pour filtrer une liste par rapport à une autre :
Conserver uniquement les éléments d'une liste qui ne figurent pas dans un ensemble connu
seen = {"apple", "cherry"}
candidates = ["apple", "mango", "banana", "cherry", "kiwi"]
new_items = [item for item in candidates if item not in seen]
print(new_items) # ['mango', 'banana', 'kiwi']C'est beaucoup plus rapide que if item not in seen_list lorsque seen est grand.
Convertir un ensemble en liste pour un accès par index
Lorsque vous avez réellement besoin d'un accès positionnel, convertissez d'abord l'ensemble en liste. Gardez à l'esprit que l'ordre résultant est arbitraire, sauf si vous triez explicitement.
Convertir un ensemble en liste triée et accéder par index
my_set = {"cherry", "apple", "banana"}
sorted_list = sorted(my_set) # ['apple', 'banana', 'cherry']
print(sorted_list[0]) # apple
print(sorted_list[-1]) # cherrysorted() renvoie toujours une nouvelle liste ; l'ensemble d'origine est inchangé.
Utiliser any() et all() avec des ensembles
any() et all() fonctionnent avec tout itérable, y compris les ensembles, et vous permettent de tester des conditions sur tous les éléments sans écrire de boucle explicite.
Tester si certains ou tous les éléments satisfont une condition
numbers = {2, 4, 6, 8}
print(any(n > 5 for n in numbers)) # True (6 and 8 are > 5)
print(all(n % 2 == 0 for n in numbers)) # True (all are even)Obtenir un élément arbitraire unique
Si vous avez juste besoin d'un élément et que vous ne vous souciez pas duquel il s'agit, vous pouvez utiliser next() avec iter() :
Consulter un élément sans modifier l'ensemble
my_set = {"apple", "banana", "cherry"}
first = next(iter(my_set))
print(first) # one of the three fruits — which one is unspecifiedC'est un schéma courant lorsque vous devez inspecter un ensemble dont vous savez qu'il n'est pas vide, sans le consommer ni le modifier.
Récapitulatif des techniques d'accès
| Technique | À utiliser quand… |
|---|---|
for item in my_set | Vous devez parcourir chaque élément |
item in my_set | Vous devez vérifier l'appartenance (O(1)) |
item not in my_set | Vous devez vérifier l'absence |
sorted(my_set)[i] | Vous avez besoin d'un accès positionnel (tri préalable) |
next(iter(my_set)) | Vous avez besoin d'un élément arbitraire |
any() / all() | Vous devez tester une condition sur tous les éléments |
Chapitres connexes
- Ensembles Python — créer des ensembles et comprendre leurs propriétés
- Boucles sur les ensembles — schémas de boucles avancés avec les ensembles
- Ajouter des éléments à un ensemble — ajouter un ou plusieurs éléments
- Supprimer des éléments d'un ensemble —
remove(),discard()etpop() - Joindre des ensembles — union, intersection et différence