Comment créer des tuples en Python et pourquoi les utiliser ?



Un tuple, intégré à Python, est une structure de données conçue pour regrouper des éléments. Semblable à une liste, il se distingue par sa rapidité accrue.

Cependant, certaines limitations font que les listes sont parfois préférables. Cet article explore les aspects essentiels pour maîtriser l’utilisation des tuples.

Qu’est-ce qu’un Tuple?

Comme mentionné précédemment, un tuple est un type de donnée fondamental en Python servant à organiser des ensembles de données. Son fonctionnement est analogue à celui d’une liste, car il ordonne les informations de manière itérable, à la façon d’un tableau. La particularité du tuple réside dans son immuabilité : une fois créé, son contenu est figé, impossible à modifier.

Il est impossible d’ajouter ou de supprimer des éléments. Ainsi, le tuple est idéal pour stocker des données stables. Il peut même accueillir des données de types variés. La section suivante détaille les différentes approches pour créer des tuples en Python.

Comment Créer un Tuple en Python?

Il existe diverses façons de générer des tuples en Python. Cette partie explore trois des méthodes les plus courantes, celles que vous rencontrerez souvent en lisant le code d’autres développeurs.

Pour expérimenter les exemples de code, Python doit être installé sur votre système. Si ce n’est pas le cas, un guide d’installation est disponible. Vous pouvez également exécuter votre code via un environnement en ligne tel que Google Colab.

#1. Utilisation de la syntaxe littérale (parenthèses)

La méthode la plus courante pour définir un tuple en Python est d’encadrer un ensemble de valeurs entre parenthèses, chacune étant séparée par une virgule. L’exemple suivant illustre cette approche :

# Création d'un tuple en encadrant les valeurs par des parenthèses
valeurs = (1, 2, 3)

# Affichage du tuple
print(valeurs)

# Affichage du type de la variable "valeurs"
print(type(valeurs))

L’exécution de ce code affichera le résultat suivant :

Comme le montre le résultat, le tuple contient les valeurs spécifiées lors de son initialisation et est de type .

En Python, les parenthèses sont facultatives lors de la création d’un tuple. Ainsi, la déclaration valeurs = 1, 2, 3 est aussi valide que valeurs = (1, 2, 3). Néanmoins, il est recommandé d’employer les parenthèses pour une meilleure lisibilité du code.

La création d’un tuple avec un seul élément nécessite une attention particulière. Il ne suffit pas de placer cet élément entre parenthèses ; il faut également ajouter une virgule à la fin. Voici un exemple :

# Sans virgule finale, il ne s'agit pas d'un tuple
pas_un_tuple = (1)

# Avec virgule finale, il s'agit bien d'un tuple
un_tuple = (1,)

# Affichage de "pas_un_tuple"
print(pas_un_tuple)

# Affichage du type de donnée de "pas_un_tuple"
print(type(pas_un_tuple))

# Affichage de "un_tuple"
print(un_tuple)

# Affichage du type de donnée de "un_tuple"
print(type(un_tuple))

L’exécution du code révèle que `pas_un_tuple` est interprété comme un entier de valeur 1. Il est essentiel de retenir cette particularité lors de la création de tuples.

#2. Utilisation de la fonction constructeur

Une autre manière de créer des tuples en Python est d’employer la fonction constructeur `tuple()`. Cette méthode consiste à appeler la fonction en lui passant un objet itérable comme argument, tel qu’une liste. Ce dernier sera alors transformé en tuple. Voici un exemple :

# Création d'un tuple à partir d'une liste
valeurs = tuple([1, 2, 3])

# Affichage des valeurs
print(valeurs)

# Affichage du type de donnée de la variable "valeurs"
print(type(valeurs))

Comme vous pouvez le constater, l’emploi de la fonction aboutit au même résultat que l’utilisation de la syntaxe littérale. Toutefois, la fonction permet de générer un tuple basé sur une valeur dynamique, telle qu’une liste dont les valeurs sont déterminées à l’exécution. Avec la première méthode, il est nécessaire de connaître les valeurs ou les identifiants constituant le tuple lors de l’écriture du code.

#3. Création d’un tuple vide

Lors de la manipulation de tuples, il est parfois nécessaire de créer des tuples vides. Ceux-ci peuvent être créés de deux manières : avec le constructeur ou avec la syntaxe littérale. L’exemple suivant montre les deux approches :

# Utilisation de la syntaxe littérale
tuple_vide_1 = ()

# Utilisation du constructeur
tuple_vide_2 = tuple()

Les tuples vides servent notamment à représenter un ensemble de résultats inexistant. Prenez l’exemple de cette fonction :

def creer_intervalle(debut, fin):
    return tuple(range(debut, fin))

Cette fonction génère un tuple contenant les valeurs allant du début à la fin spécifiée. Pour parcourir les résultats de la fonction, on utilise généralement une boucle :

mes_valeurs = creer_intervalle(0, 5)

for valeur in mes_valeurs:
    pass

Si vous passez 5 et 5 en argument à `creer_intervalle`, la fonction retournera un tuple vide. La boucle `for` ne produira alors aucune itération, et le code se déroulera sans incident.

En l’absence de tuples vides et si `creer_intervalle` retournait par exemple la valeur `None`, une tentative d’itération générerait une erreur. Pour éviter un plantage, il faudrait alors ajouter un test pour gérer le cas limite où la fonction retourne `None` ou toute autre valeur indiquant un tuple vide.

Cela compliquerait inutilement le code. Il est préférable d’éviter les cas spéciaux et de s’assurer que toutes les fonctions retournent des valeurs d’une interface uniforme. Dans ce contexte, cela signifie que la fonction doit toujours retourner un tuple, même s’il est parfois vide.

Comment Accéder aux Éléments

Il y a deux manières d’accéder aux éléments d’un tuple en Python : via leur index ou en les déstructurant. Nous allons commencer par explorer l’accès par index.

Accéder aux Éléments par Index

L’accès aux éléments via leur index est similaire à l’accès aux éléments d’une liste. On utilise pour cela la notation entre crochets. Les tuples sont indexés à partir de zéro, ce qui signifie que le premier élément a l’index 0, le suivant l’index 1 et ainsi de suite jusqu’au dernier élément.

L’exemple ci-dessous illustre l’accès aux éléments par leur index :

# Création d'un tuple
valeurs = (1, 2, 3, 4)

# Accès au premier élément
premier_element = valeurs[0]

# Accès au quatrième élément (index 3)
quatrieme_element = valeurs[3]

L’indexation négative est également possible. L’élément d’index -1 est le dernier élément, celui d’index -2 est l’avant-dernier et ainsi de suite.

# Création du tuple
valeurs = (1, 2, 3, 4)

# Accès au dernier élément
dernier_element = valeurs[-1]

# Accès à l'avant-dernier élément
avant_dernier_element = valeurs[-2]

De plus, on peut accéder à des sous-ensembles d’éléments en utilisant le découpage (slicing). Cette méthode est similaire à celle utilisée pour les listes. La notation est : `[::]`. L’exemple suivant illustre le découpage :

# Création du tuple
valeurs = (1, 2, 3, 4, 5, 6, 7)

# Récupération des trois premiers éléments
valeurs[1:3]

# Récupération d'un élément sur deux
valeurs[::2]

Itérer sur des Éléments

Un tuple est un objet itérable en Python. On peut donc parcourir ses éléments à l’aide d’une boucle `for`, comme le montre cet exemple :

valeurs = (1, 2, 3, 4)

for valeur in valeurs:
    print(valeur)

Cette approche d’accès aux éléments est idéale lorsque l’on souhaite traiter tous les éléments du tuple.

Accéder aux Éléments par Déstructuration

Pour comprendre la déstructuration, prenons l’exemple suivant, où l’on essaie de récupérer les différents éléments d’un tuple.

# Création d'un tuple contenant les informations d'un utilisateur
enregistrement_personne = (1, 'John Doe', '[email protected]')

# Accès aux différents éléments du tuple pour les utiliser dans le code
identifiant = enregistrement_personne[1]
nom = enregistrement_personne[2]
email = enregistrement_personne[3]

Python permet une méthode d’accès plus élégante :

# Création du tuple contenant les informations d'un utilisateur
enregistrement_personne = (1, 'John Doe', '[email protected]')

identifiant, nom, email = enregistrement_personne

C’est ce qu’on appelle la déstructuration. La première variable, `identifiant`, se voit attribuer la première valeur du tuple, la deuxième variable, `nom`, reçoit le deuxième élément et ainsi de suite. L’exemple ci-dessus équivaut à :

identifiant, nom, email = (1, 'John Doe', '[email protected]')

Ici, au lieu de stocker le tuple dans une variable, on le décompose immédiatement. En sachant qu’il est possible d’omettre les parenthèses lors de la création de tuples, on peut écrire le code de la manière suivante :

identifiant, nom, email = 1, 'John Doe', '[email protected]'

Après cette opération, les variables `identifiant`, `nom` et `email` contiendront les valeurs 1, ‘John Doe’ et ‘[email protected]‘. Il s’agit d’une méthode pratique et concise pour créer des variables en Python, que l’on rencontre souvent dans du code de production. Il est donc important de comprendre que, derrière cette élégante syntaxe, se cache le concept des tuples.

Différences entre Tuple et Liste

Bien qu’ils soient similaires, certaines différences fondamentales font que chacun est mieux adapté à un usage spécifique. Comprendre ces différences vous aidera à sélectionner le bon type de données et à écrire un code plus efficace.

AspectTupleListe
Stockage en mémoireStocké dans une zone mémoire contiguëStocké dans différentes parties de la mémoire
ModifiabilitéImmuable (ne peut être modifié)Mutable (peut être modifié)
VitesseAccès plus rapideAccès plus lent
Type de donnéesStocke généralement des données de types variésStocke généralement des données du même type
Cas d’utilisationHabituellement utilisé pour stocker une collection de valeurs similaires, telles que des marques.Habituellement utilisé pour stocker une collection de valeurs similaires telles que des marques.

Avantages d’un Tuple

#1. Plus rapide

Grâce à la façon dont les valeurs d’un tuple sont stockées en mémoire de manière contiguë, l’accès aux valeurs est plus rapide qu’avec une liste. Cependant, du fait de leur immuabilité, les tuples ne sont pas toujours la meilleure structure de données pour stocker des collections de valeurs.

Leur utilisation idéale consiste à stocker en mémoire un grand volume de données qui ne seront pas modifiées, mais qui seront consultées à plusieurs reprises durant l’exécution du programme. Dans ce cas, votre programme bénéficiera grandement des performances accrues des tuples.

#2. Retourner Plusieurs Valeurs

Vous pouvez utiliser des tuples pour retourner plusieurs valeurs à partir d’une fonction et déstructurer le résultat. Par exemple :

from random import randint

def creer_deux_nombres():
    premier_nombre = randint(0, 9)
    second_nombre = randint(0, 9)

    return premier_nombre, second_nombre

premier_nombre, second_nombre = creer_deux_nombres()

Dans cet exemple, une fonction génère deux nombres aléatoires et les retourne tous les deux dans un tuple. L’instruction `return premier_nombre, second_nombre` équivaut à écrire `return (premier_nombre, second_nombre)`. En effet, les parenthèses sont facultatives lors de la création de tuples. Pour accéder au résultat, on utilise la déstructuration.

#3. Protection en Écriture des Valeurs

Les tuples étant immuables une fois créés, ils sont idéaux pour stocker des données en mémoire qui ne changeront pas pendant l’exécution du programme. Ils garantissent que vous ne modifierez pas accidentellement les données ailleurs dans votre code.

#4. Stocker Plusieurs Types de Données

Les tuples permettent de stocker des valeurs de différents types. Cela vous permet de créer des enregistrements de données, comme le stockage des informations d’un utilisateur dans un tuple. Vous pouvez aussi y inclure des éléments plus complexes tels que des fonctions, des dictionnaires, d’autres tuples et même des listes.

Méthodes de Tuple Courantes

#1. count()

L’objet tuple possède la méthode `count()`, qui calcule le nombre d’occurrences d’un élément donné. Voici un exemple :

# Création d'un tuple contenant plusieurs nombres
valeurs = (1, 2, 3, 4, 5, 4, 4, 6)

# Comptage du nombre de 4
nombre_de_4 = valeurs.count(4)

# Affichage du nombre de 4
print(nombre_de_4)

Dans cet exemple, nous constatons que le nombre 4 apparaît exactement trois fois dans le tuple.

#2. index()

La méthode `index()` permet de trouver l’index de la première occurrence d’une valeur dans un tuple. Si la valeur n’existe pas, une exception `ValueError` est levée. Le code suivant illustre le fonctionnement de cette méthode :

# Création d'un tuple contenant plusieurs nombres
valeurs = (1, 2, 3, 4, 5, 4, 4, 6)

# Recherche de l'index du 4
index_du_4 = valeurs.index(4)
print("Index du 4:", index_du_4)

# Recherche de l'index du 9
index_du_9 = valeurs.index(9)
print("Index du 9:", index_du_9)

L’exécution de ce code produit le résultat suivant :

Dans ce cas, l’index de 4 est bien 3 et le code s’exécute sans problème. Toutefois, la recherche de l’index de 9 a provoqué une exception. Il est donc important de gérer ces exceptions lors de l’écriture de programmes Python qui utilisent la méthode `index()`.

#3. len()

Comme tous les objets itérables en Python, les tuples ont une propriété « longueur » que l’on peut obtenir en passant le tuple comme argument à la fonction `len()`.

# Création d'un tuple
valeurs = (1, 2, 3, 4)

# Obtention de la longueur
longueur = len(valeurs)

# Affichage du résultat
print(longueur)

Ceci est le résultat de l’exécution du code ci-dessus.

#4. min() et max()

Les fonctions `min()` et `max()` parcourent chaque élément d’un itérable et les comparent afin de déterminer le plus petit et le plus grand élément. `max()` retourne le plus grand élément, tandis que `min()` retourne le plus petit.

Dans le cas de nombres, la comparaison est évidente. Avec des chaînes de caractères, Python utilise l’ordre alphabétique. Le plus petit mot, retourné par `min()`, est le premier mot si les chaînes ont été classées par ordre alphabétique. Le plus grand mot est alors le dernier. Si l’itérable contient un mélange de types de données différents, les opérations échoueront car Python ne sait pas comment comparer différents types de données.

Voici un exemple de code :

# Création d'un tuple avec des valeurs
valeurs = (1, 2, 3, 4, 5)

# Obtention de la plus grande valeur
plus_grand = max(valeurs)

# Obtention de la plus petite valeur
plus_petit = min(valeurs)

# Affichage des résultats
print(plus_grand)
print(plus_petit)

#5. sorted()

La fonction `sorted()` en Python prend un objet itérable et retourne une liste contenant les éléments triés. Vous pouvez appeler la fonction `sorted()`, en passant un tuple comme argument, et obtenir les éléments du tuple triés dans une liste. Pour reconvertir la liste triée en tuple, utilisez la fonction constructeur `tuple()`. Voici un exemple :

# Création d'un tuple avec des valeurs dans un ordre aléatoire
valeurs = (1, 5, 3, 3, 2, 4)

# Utilisation de sorted() pour trier les valeurs dans une liste
liste_triee = sorted(valeurs)

# Conversion de la liste en tuple
tuple_trie = tuple(liste_triee)

# Affichage du résultat
print(tuple_trie)

#6. Additionner et Multiplier des Tuples

L’opération d’addition sur deux tuples a pour effet de les concaténer. La multiplication répète les éléments d’un tuple autant de fois que la valeur du multiplicateur. L’exemple suivant illustre ces deux opérations.

# Création d'un tuple avec des valeurs
valeurs = (1, 2, 3, 4, 5)

# Création d'un nouveau tuple par addition
ajoute = valeurs + valeurs

# Création d'un nouveau tuple par multiplication
multiplie = valeurs * 2

print("valeurs + valeurs =", ajoute)
print("valeurs * 2 =", multiplie)

Derniers Mots

Dans cet article, vous avez appris que :

  • Les tuples sont des objets de type liste utilisés pour stocker des collections de valeurs.
  • Contrairement aux listes, ils sont immuables.
  • Ils sont plus rapides et plus efficaces que les listes.
  • Ils peuvent être créés en utilisant des parenthèses et en séparant les valeurs par des virgules.
  • Ils peuvent aussi être créés avec la fonction constructeur `tuple()`.
  • Vous pouvez accéder aux valeurs individuelles via un système d’index basé sur zéro.
  • Vous pouvez également déstructurer les valeurs du tuple.
  • Vous pouvez parcourir les valeurs en utilisant une boucle `for`.
  • Différentes méthodes sont disponibles pour manipuler les tuples.

Pour approfondir vos connaissances, vous pouvez explorer d’autres sujets tels que les méthodes de liste et les méthodes de dictionnaire en Python.