%% nav-debut : généré par gen_navigation.py, ne pas modifier à la main %%
> [!nav]
> ↩ [[Code et Développement/Programmation/Lecture de Code - Python/Lecture de code - Python|Accueil · Lecture de code - Python]]
>
> | [[Code et Développement/Programmation/Lecture de Code - Python/09_tuples\|← Tuples]] | [[Code et Développement/Programmation/Lecture de Code - Python/11_dictionnaires\|Dictionnaires →]] |
> |:---|---:|
%% nav-fin %%
# Ensembles (set)
Un ensemble est une collection **non ordonnée** de valeurs **uniques** (sans doublons).
> [!warning] Ordre d'affichage
> L'ordre dans lequel Python affiche un ensemble n'est pas garanti. Il peut changer d'une exécution à l'autre. Pour obtenir une sortie prévisible, on trie : `sorted(s)` renvoie une liste triée. Une question de test ne demande jamais d'afficher un ensemble non trié.
---
## Création
```python
s = {1, 2, 3}
s = set() # ensemble vide ({} crée un dictionnaire)
s = set([3, 1, 4, 1, 5, 9, 2]) # contient 1, 2, 3, 4, 5, 9 : le doublon 1 disparaît
s = set("bonjour") # contient b, o, n, j, u, r : lettres uniques
```
---
## Opérations de base
```python
s = {1, 2, 3}
s.add(4) # s contient 1, 2, 3, 4
s.remove(2) # s contient 1, 3, 4 ; KeyError si l'élément est absent
s.discard(99) # pas d'erreur si l'élément est absent
len(s) # vaut 3
3 in s # vaut True
```
---
## Opérations ensemblistes
```python
a = {1, 2, 3, 4}
b = {3, 4, 5, 6}
sorted(a | b) # union : vaut [1, 2, 3, 4, 5, 6]
sorted(a & b) # intersection : vaut [3, 4]
sorted(a - b) # différence : vaut [1, 2]
sorted(a ^ b) # différence symétrique : vaut [1, 2, 5, 6]
```
---
## Parcours
```python
for x in {3, 1, 2}:
print(x) # ordre non garanti
for x in sorted({3, 1, 2}):
print(x) # affiche 1, puis 2, puis 3
```
---
## Cas d'usage typiques
```python
# Supprimer les doublons d'une liste
lst = [1, 2, 2, 3, 3, 3]
unique = sorted(set(lst)) # vaut [1, 2, 3]
# Compter les lettres distinctes
mot = input()
print(len(set(mot)))
# Tester l'appartenance (plus rapide qu'avec une liste)
voyelles = {'a', 'e', 'i', 'o', 'u'}
print('e' in voyelles) # affiche True
```
## À vous
**À manipuler :** prédisez la sortie, ligne par ligne.
```sq-affiche
lst = [4, 1, 4, 2, 1]
s = set(lst)
print(len(s))
print(sorted(s))
print(3 in s)
---
saisie: lignes
réponse: 3\n[1, 2, 4]\nFalse
explication: set supprime les doublons : il reste 1, 2 et 4. sorted renvoie une liste triée.
```
```sq-affiche
a = {1, 2, 3}
b = {2, 3, 4}
print(sorted(a & b))
print(sorted(a | b))
print(len(a - b))
---
saisie: lignes
réponse: [2, 3]\n[1, 2, 3, 4]\n1
explication: & garde les éléments communs, | les réunit, a - b garde les éléments de a absents de b (ici 1).
```
%% nav-debut : généré par gen_navigation.py, ne pas modifier à la main %%
> [!nav]
> ↩ [[Code et Développement/Programmation/Lecture de Code - Python/Lecture de code - Python|Accueil · Lecture de code - Python]]
>
> | [[Code et Développement/Programmation/Lecture de Code - Python/09_tuples\|← Tuples]] | [[Code et Développement/Programmation/Lecture de Code - Python/11_dictionnaires\|Dictionnaires →]] |
> |:---|---:|
%% nav-fin %%