Chapitre 1 : Les p-uplets (tuples)¶
Programme officiel (B.O.)¶
B.O. spécial n° 1 du 22 janvier 2019 - NSI Première
| Contenus | Capacités attendues | Commentaires |
|---|---|---|
| p-uplets. p-uplets nommés | Écrire une fonction renvoyant un p-uplet de valeurs. |
1. Qu'est-ce qu'un p-uplet ?¶
1.1 Définition¶
Un p-uplet (ou tuple en anglais) est une collection ordonnée et non modifiable de valeurs. On dit qu'un tuple est immuable (immutable).
Un p-uplet peut contenir des éléments de types différents : entiers, flottants, chaînes, booléens, etc.
1.2 Vocabulaire¶
Le nom « p-uplet » vient de la généralisation des mots courants :
| Nombre d'éléments | Nom |
|---|---|
| 2 | couple (ou paire) |
| 3 | triplet |
| 4 | quadruplet |
| n | n-uplet |
| p | p-uplet (cas général) |
1.3 Syntaxe en Python¶
On crée un tuple avec des parenthèses (ou même sans, grâce à la virgule) :
>>> t1 = (1, 2, 3)
>>> t2 = 1, 2, 3 # les parenthèses sont facultatives
>>> t3 = (42,) # tuple d'un seul élément : la virgule est obligatoire
>>> t4 = () # tuple vide
>>> type(t1)
<class 'tuple'>
Attention
(42) n'est pas un tuple, c'est juste le nombre 42 entre parenthèses. Pour un tuple à un seul élément, il faut écrire (42,) avec la virgule.
2. Accéder aux éléments¶
2.1 Indexation¶
Comme pour les chaînes de caractères, on accède aux éléments par leur indice (en commençant à 0) :
Les indices négatifs permettent de compter depuis la fin :
2.2 Longueur¶
La fonction len() renvoie le nombre d'éléments :
2.3 Parcours¶
On peut parcourir un tuple avec une boucle for :
3. Immuabilité¶
Un tuple est non modifiable : on ne peut ni ajouter, ni supprimer, ni modifier un élément.
C'est la différence fondamentale avec les listes (tableaux), qui sont modifiables.
Pourquoi utiliser des tuples ?
- Pour protéger des données qui ne doivent pas changer (coordonnées, constantes, clés de dictionnaire).
- Pour renvoyer plusieurs valeurs depuis une fonction.
- Pour documenter l'intention : un tuple dit « ces données vont ensemble et ne changeront pas ».
4. Déballage (unpacking)¶
On peut affecter chaque élément d'un tuple à une variable en une seule ligne. C'est le déballage (unpacking) :
Le nombre de variables doit correspondre au nombre d'éléments :
>>> nom, prenom, age = ("Dupont", "Marie", 16)
>>> print(f"{prenom} {nom}, {age} ans")
Marie Dupont, 16 ans
Astuce
Le déballage permet d'échanger deux variables sans variable temporaire :
5. Fonctions renvoyant un tuple¶
Un tuple est le moyen naturel de renvoyer plusieurs valeurs depuis une fonction :
def min_max(liste):
"""Renvoie le minimum et le maximum d'une liste."""
return (min(liste), max(liste))
resultat = min_max([4, 7, 1, 9, 3])
print(resultat) # (1, 9)
# Avec déballage :
petit, grand = min_max([4, 7, 1, 9, 3])
print(petit) # 1
print(grand) # 9
Autre exemple :
def division_euclidienne(a, b):
"""Renvoie le quotient et le reste de a divisé par b."""
return (a // b, a % b)
q, r = division_euclidienne(17, 5)
print(f"17 = 5 x {q} + {r}") # 17 = 5 x 3 + 2
6. Opérations sur les tuples¶
Même si un tuple est immuable, certaines opérations sont possibles car elles créent un nouveau tuple :
>>> (1, 2) + (3, 4) # concaténation
(1, 2, 3, 4)
>>> (1, 2) * 3 # répétition
(1, 2, 1, 2, 1, 2)
>>> 3 in (1, 2, 3, 4) # appartenance
True
>>> (1, 2, 3).index(2) # position d'un élément
1
>>> (1, 2, 2, 3, 2).count(2) # nombre d'occurrences
3
7. P-uplets nommés¶
7.1 Problème¶
Avec un tuple classique, il faut se souvenir de la position de chaque information :
7.2 Solution : les p-uplets nommés¶
Python propose les namedtuples du module collections, qui associent un nom à chaque champ :
from collections import namedtuple
Eleve = namedtuple("Eleve", ["nom", "prenom", "age", "classe"])
e = Eleve("Dupont", "Marie", 16, "1ere3")
print(e.nom) # Dupont
print(e.prenom) # Marie
print(e.age) # 16
print(e.classe) # 1ere3
On accède aux champs par leur nom (plus lisible) tout en conservant l'accès par indice :
7.3 Avantages¶
- Le code est plus lisible :
e.nomest plus clair quee[0]. - Le tuple reste immuable : on ne peut pas modifier
e.nom. - On peut l'utiliser comme un tuple classique (parcours, déballage, etc.).
8. Résumé¶
| Propriété | Tuple |
|---|---|
| Syntaxe | (a, b, c) ou a, b, c |
| Ordonné | Oui (indice 0, 1, 2...) |
| Modifiable | Non (immuable) |
| Types mélangés | Oui |
| Accès par indice | t[0], t[-1] |
| Déballage | x, y = (3, 7) |
| Usage principal | Renvoyer plusieurs valeurs, données constantes |
| P-uplet nommé | namedtuple : accès par nom (e.prenom) |