Introduction aux tuples avec Python
Python nous offre la possibilité d’utiliser quatre types de variables aux contenus hétérogènes : les ensembles (non ordonnés et sans doublon), les listes (ordonnées et modifiables), les dictionnaires (dont les index sont remplacés par des clefs) et les p-uplets que nous examinerons ici.
p-uplets
Les p-uplets, ou n-uplets, ou tuples sont tout simplement des listes dont les éléments ne peuvent être modifiés.
Ce sont donc des structures de données éventuellement hétérogènes.
On définit un p-uplet entre parenthèses ou même sans parenthèses (le script est plus clair si on les utilise).
Exemple : nom, année de naissance et année de décès d’une personnalité.
perso = ("Paracelse",1493,1541)
Ou :
perso = "Paracelse",1493,1541
Ou encore, rappelons-le, avec des chaînes de caractères entre guillemets simples.
Pour connaître la longueur :
len(perso)
On obtient 3
Les éléments sont indexés à partir de zéro. Donc :
perso[1] donne en sortie : 1493
Comme toujours, si l’on ignore quelle est la nature de notre variable :
type(perso)
On obtient :
<class 'tuple'>
Concaténation :
nat = ("Suisse",)
perso + nat
Remarquez la virgule pour définir nat en tant que p-uplet (sinon, il s’agit d’une simple chaîne de caractère et la concaténation est impossible). Sortie :
('Paracelse', 1493, 1541, 'Suisse')
p-uplets nommés
Le p-uplet nommé indexe ses valeurs avec des intitulés et non de façon implicite. Il n’est pas modifiable, contrairement au dictionnaire dont il s’approche beaucoup. Il faut charger une bibliothèque pour disposer de ce type de variable.
Exemple de syntaxe :
from collections import namedtuple
# Déclaration du tuple nommé Vehicule avec trois champs
Vehicule = namedtuple('Vehicule', ['marque', 'modèle', 'année'])
# Création d’un stock de voitures d’occasion
stock = [
Vehicule(marque="Peugeot", modèle="308", année=2019),
Vehicule(marque="Mercedes", modèle="classe E", année=2012),
Vehicule(marque="Fiat", modèle="500", année=2020)
]
On accède aux données par nom d’attribut ou par indice.
La solution du p-uplet nommé est certes moins souple que celle du dictionnaire mais elle est plus sûre et moins gourmande en mémoire.
Exercice 1
Extraire les nombres pairs d’un tuple d’entiers.
Corrigé
def obtenir_nombres_pairs_tuple(tup):
# Utilise une compréhension de liste pour filtrer les nombres pairs, puis retourne un tuple
nombres_pairs = tuple(num for num in tup if num % 2 == 0)
return nombres_pairs
# Exemple d'utilisation
mon_tuple = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
resultat = obtenir_nombres_pairs_tuple(mon_tuple)
print("Les nombres pairs sont :", resultat)
On obtient :
Les nombres pairs sont : (2, 4, 6, 8, 10)
Pas besoin de grosses modifications pour que ce script s’applique aux listes.
Exercice 2
Reprendre l’exemple des véhicules d’occasion en p-uplets simples et extraire les marques disponibles.
Corrigé
# Création d’une liste de p-uplets non nommés pour représenter les voitures d'occasion
voitures = [
("Peugeot", "308", 2019),
("Mercedes", "Classe E", 2012),
("Fiat", "500", 2020)
]
# Fonction pour extraire les marques
def extraire_marques(liste_voitures):
return [voiture[0] for voiture in liste_voitures]
# L'élément à l'indice 0 correspond à la marque
# Appel de la fonction
marques = extraire_marques(voitures)
print("Marques :", marques)
On obtient la liste des marques. Attention, s’il y a deux modèles d’une même marque, celle-ci apparaît en doublon.