image accueil

Les tuples

1. Définition et syntaxe

Les tuples sont utilisés pour regrouper les données. Ainsi, un tuple (n-uplet en français) est une collection ordonnée d’objets de types quelconques séparés par des virgules.
Comme une chaîne de caractères, un tuple, une fois créé, est immuable c’est-à-dire non modifiable. Cela signifie que des éléments ne peuvent pas être ajoutés ou supprimés dynamiquement - tous les éléments d'un tuple doivent être définis au moment de sa création.
Syntaxe :

In [26]:
un_tuple = 'a', 'b', 'c', 1, True, 5.7
print(un_tuple)
('a', 'b', 'c', 1, True, 5.7)

Bonnes pratiques : Pour améliorer la lisibilité du code, il est vivement conseillé d’encadrer le tuple par des parenthèses.
Ainsi :

In [ ]:
un_tuple = ('a','b','c', 1, True, 5.7)

Remarque :
Un tuple est aussi appelé un enregistrement.

Un tuple composé d'un seul objet

In [ ]:
t = ('spam',) 

Un tuple vide

In [3]:
tuple_vide = ()
In [4]:
type(tuple_vide)
Out[4]:
tuple

2. Accéder aux éléments d'un tuple

Comme les chaînes de caratères, un tuple est une séquence en Python. Autrement dit, un ensemble fini et ordonné d’objets numérotés de \(0\) à \(n-1\) si le tuple est composé de \(n\) objets.
Ainsi, un tuple peut être parcouru objet par objet. On dit qu’un tuple est un objet itérable.
On considère le tuple ci-après.

In [2]:
un_tuple = (3,'élève', 15.2, False)

Que renvoie les instructions suivantes :

In [ ]:
un_tuple[2]
In [ ]:
un_tuple[-1]
In [ ]:
un_tuple[1:]
In [ ]:
un_tuple[:2]

3. Manipuler les tuples

Déterminer la longueur d'un tuple

In [31]:
len(un_tuple)
Out[31]:
4

Concaténer des tuples

In [6]:
(1, 2, 3) + ('a', 'b', 'c')
Out[6]:
(1, 2, 3, 'a', 'b', 'c')

Test d'appartenance ou de non appatenance à un tuple

In [36]:
False in un_tuple
Out[36]:
True
In [3]:
False not in un_tuple
Out[3]:
False

Connaître les méthodes applicables aux tuples

In [ ]:
dir(tuple)

Construire un tuple à partir d'une chaîne de caractères

In [16]:
adn = 'ATGCCGCGAT'
In [17]:
t = tuple(adn)
In [18]:
t
Out[18]:
('A', 'T', 'G', 'C', 'C', 'G', 'C', 'G', 'A', 'T')

Le tuple unpacking (affectation multiple ou simultanée, on dit aussi déballage)

In [4]:
a, b, c = ('spam', 3, 'guanine')
In [5]:
print(a)
spam
In [41]:
b
Out[41]:
3
In [42]:
c
Out[42]:
'guanine'
In [1]:
i = 2
j = 5
In [2]:
#On permute i et j
i, j = j, i
In [3]:
print(i)
print(j)
5
2

4. Parcourir un tuple à l'aide d'une boucle for

Comme avec une chaîne de caractères, on utilise l'algorithme du parcours séquentiel.

In [ ]:
un_tuple = (3,'élève', 15.2, False)
for elt in un_tuple:
    print(elt)

L'autre variante du parcours utilisant les indices

In [ ]:
#Parcourir un tuple par les index 
for i in range(len(un_tuple)):
    print(un_tuple[i])

5. La sous-classe namedtuple du module collections

5.1. Définition

Cette sous-classe permet de créer un tuple avec des champs nommés ; ce qui rend le code plus lisible et explicite. Ils peuvent être utilisés partout où les n-uplets natifs sont utilisés, et ils ajoutent la possibilité d'accéder à leurs champs grâce à leur nom au lieu de leur index de position.

In [10]:
M = (3, 5)
In [11]:
M[0]
Out[11]:
3
In [4]:
from collections import namedtuple
In [5]:
Point = namedtuple("Point", "x y")
In [6]:
M = Point(3, 5)
In [7]:
M
Out[7]:
Point(x=3, y=5)

Nous avons maintenant un point avec deux champs nommés de manière appropriée, x et y.
Ce point fournit une représentation sous forme de chaîne conviviale et descriptive (Point(x = 3, y = 5)) par défaut. Il permet d'accéder aux coordonnées en utilisant la notation par points, ce qui est pratique, lisible et explicite.
On peut également utiliser des indices pour accéder à la valeur de chaque coordonnée.

In [8]:
#Un autre exemple
Vecteur = namedtuple("Vecteur", ["x", "y"])
In [9]:
u = Vecteur(-1, 4)
In [10]:
u
Out[10]:
Vecteur(x=-1, y=4)
In [11]:
Vecteur = namedtuple("Vecteur", "x, y")
In [12]:
v = Vecteur(-3, -7)
In [13]:
v
Out[13]:
Vecteur(x=-3, y=-7)

5.2. Accéder aux éléments d'un n-uplet

In [14]:
#Accès par le nom
M.x
Out[14]:
3
In [15]:
#Accès par index
M[0]
Out[15]:
3
In [16]:
# Accès par la fonction built-in (intégrée) getattr()
getattr(v, 'x')
Out[16]:
-3
In [17]:
getattr(v, 'y')
Out[17]:
-7
In [18]:
Musicien = namedtuple("Musicien", "nom titres")
In [19]:
Jackson = Musicien("Michael Jackson", ["Billie Jean", "Beat it"])
In [20]:
Jackson
Out[20]:
Musicien(nom='Michael Jackson', titres=['Billie Jean', 'Beat it'])
In [21]:
Johnny_halliday = Musicien("Jean-Philippe Smet", ["L'Envie", "Allumer le feu", "Que je t'aime"])
In [22]:
Johnny_halliday
Out[22]:
Musicien(nom='Jean-Philippe Smet', titres=["L'Envie", 'Allumer le feu', "Que je t'aime"])
In [ ]: