Chapitre 9 - Tuples#

Définition#

Un tuple est un ensemble ordonné et immuable d’éléments (il est aussi appelé n-uplet dans la documentation Python). Le nombre, l’ordre et la valeur des éléments sont fixes.

Création de tuples#

Avec des parenthèses :

tuple_vide = ()
tuple_à_un_élement = (1,)   # notez la virgule
tuple_à_deux_éléments = (1, 2)   # on dit aussi: "couple"

Sauf pour le tuple vide, c’est la virgule qui fait le tuple.

Note : tous les tuples sont truthy, sauf les tuples vides.

Tuples hétérogènes#

Comme les listes, les tuples peuvent contenir des éléments de types différents :

# Un entier et une string
mon_tuple = (42, "bonjour")

# Un entier et un autre tuple
mon_tuple = (21, (True, "au revoir"))

Accès#

Avec [] et l’index de l’élément dans le tuple :

mon_tuple = (42, "bonjour")
print(mon_tuple[0])
# affiche: 42

print(mon_tuple[1])
# affiche: "bonjour"

Modification#

C’est interdit :

mon_tuple = (42, "bonjour")
mon_tuple[0] = 44
# erreur: TypeError: 'tuple' object does not support item assignment

Test d’appartenance#

Avec in :

mon_tuple = (42, 14)
print(42 in mon_tuple)
# affiche: True

print(14 in mon_tuple)
# affiche: True

print(13 in mon_tuple)
# affiche: False

Dissociation#

Créer plusieurs variables, à partir d’un tuple, en une seule ligne :

couple = ("Batman", "Robin")
héros, side_kick = couple
print(héros)
# affiche: Batman

print(side_kick)
# affiche: Robin

Quelques erreurs classiques#

héros, side_kick, ennemi = couple
# erreur: ValueError (3 != 2)

(héros,) = couple
# erreur: ValueError (1 != 2)

# Gare à la virgule:
héros, = couple
# erreur: ValueError (1 != 2)

Pièges#

f(a, b, c)   # appelle f() avec trois arguments

f((a, b, c)) # appelle f() avec un seul argument
             # (qui est lui-même un tuple de 3 valeurs)

f(())        # appelle f() avec un tuple vide


(a)      # juste la variable a entre parenthèses
(a,)     # un tuple à un élément, qui vaut la valeur de a

On peut aussi déstructurer des listes :

fruits = ["pomme", "banane", "orange"]
premier, deuxième, troisième = fruits

print(premier)
# affiche: pomme

print(deuxième)
# affiche: banane

print(troisième)
# affiche: orange

On dit aussi dissociation ou unpacking.

Utilisations des tuples#

Pour simplifier des conditions :

# Avant:
if (
   ma_valeur == "nord" or
   ma_valeur == "sud" or
   ma_valeur == "ouest" or
   ma_valeur == "est"):
           print("direction", ma_valeur)

# Après:
if ma_valeur in ("nord", "sud", "est", "ouest"):
           print("direction", ma_valeur)

Pour retourner plusieurs valeurs :

def tire_carte():
    valeur = "10"
    couleur = "trèfle"
    return (valeur, couleur)

v, c = tire_carte()
print(v, "de", c)
# affiche: 10 de trèfle

Ce n’est pas une nouvelle syntaxe, juste de la manipulation de tuples !