Les tuples
Une vidéo de présentation des tuples…
Contrairement à la list
, le tuple
est une séquence immutable. Comme la liste, c’est une collection ordonnée. Il est défini par les opérateurs (
et )
. Bien que le langage le permette, il n’est pas conseillé d’utiliser une liste pour stocker des collections hétérogènes. Cet usage est plutôt réservé au tuple
:
>>> ev = ('Everest', 8848, 'Asie', 'Himalaya')
>>> type(ev)
<class 'tuple'>
>>> len(ev)
4
Slicing
Le tuple
étant une sequence, il dispose des mêmes opérations que la list
, à l’exception des opérations de modification puisque le tuple
est immutable.
L’indexation:
>>> ev[0]
'Everest'
>>> ev[1]
8848
et le slicing:
>>> ev[:2]
('Everest', 8848)
Le tuple est immutable
Le tuple
est immutable et toute opération tentant à le modifier déclenche une erreur:
>>> ev[1] = 8849
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
Idem si l’on tente de supprimer un de ses éléments:
>>> del(ev[2])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object doesn't support item deletion
L’opération d’indexation d’un tuple
ne peut apparaître qu’à droite (RHS) de l’opérateur d’affectation =
.
Appartenance
Le tuple
dispose de toutes les méthodes de sequence. On peut en particulier utiliser l’opérateur in
pour tester l’appartenance:
>>> 'Everest' in ev
True
>>> 'Kilimandjaro' in ev
False
Itérer sur un tuple
Comme la list
, le tuple
est une séquence et l’opérateur in
est utilisé pour l’itération:
>>> for elt in ev:
... print(elt)
...
Everest
8848
Asie
Himalaya
Les méthodes de tuple
Le tuple
étant une séquence immutable, les interactions possibles avec celui ci sont limitées.
A expérimenter…
Même si le nombre de méthodes d’un tuple
est limité, il en existe cependant deux. Trouvez les, de deux façons différentes:
en utilisant une fonction Python dans l’interpréteur interactif ;
en recherchant dans la documentation officielle.
Listes de tuples
Comme on l’a vu précédemment, la list
peut contenir tout type de donnée, et en particulier on peut construire une liste de tuple
:
>>> ac = ('Aconcagua', 6959, 'Amérique du Sud', 'Cordillère des Andes')
>>> mc = ('McKinley', 6190, 'Amérique du Nord', 'Alaska')
>>> ki = ('Kilimandjaro', 5892, 'Afrique', 'Vallée du Grand Rift')
>>> sommets = [ev, ac, mc, ki]
>>> sommets
[('Everest', 8848, 'Asie', 'Himalaya'),
('Aconcagua', 6959, 'Amérique du Sud', 'Cordillère des Andes'),
('McKinley', 6190, 'Amérique du Nord', 'Alaska'),
('Kilimandjaro', 5892, 'Afrique', 'Vallée du Grand Rift')]
Chaque élément est accessible par une indexation multiple, dont la profondeur dépend de la complexité de la structure de données:
>>> sommets[2][3]
'Alaska'
Les tuples nommés
Le tuple
est parfaitement adapté à la création d’une structure de données complexe, à l’image des structures du langage C. Cependant l’accès à chacun des champs à partir de l’index (comme on vient de le voir) n’est pas très commode. Le module collections
dispose d’un namedtuple()
autorisant un accès facilité aux éléments:
>>> from collections import namedtuple
>>> Sommet = namedtuple('Sommet', ['nom', 'alt', 'pays', 'chaine'])
>>> ev = Sommet('Everest', 8848, 'Asie', 'Himalaya')
>>> ev
Sommet(nom='Everest', alt=8848, pays='Asie', chaine='Himalaya')
>>> ev.nom
'Everest'
>>> ev.chaine
'Himalaya'
Ce qu’il faut retenir
Un tuple se délimite avec
[
et]
Un tuple se délimite avec
(
et)
Un tuple se délimite avec
{
et}
Un tuple peut contenir des objets hétérogènes
Un tuple est une collection ordonnée
Les opérations de slicing sur un tuple sont légèrement différentes des opérations de slicing sur une chaine de caractères
Un tuple est mutable
Une fois créé, la taille d’un tuple est figée
On peut insérer un élément dans un tuple après sa création
On peut supprimer un élément d’un tuple
Un tuple dispose de méthodes
Le slicing peut être utilisé pour extraire des éléments d’un tuple
Le slicing peut être utilisé pour insérer des éléments dans un tuple
Le slicing ne peut pas modifier la taille d’un tuple
Sur un tuple, l’opérateur d’appartenance
in
fonctionne exactement comme pour une listeLa façon privilégiée de parcourir un tuple est d’itérer sur ses éléments
La façon privilégiée de parcourir un tuple est d’itérer sur l’index de ses éléments
Un tuple dispose d’une méthode pour trier ses éléments
On peut construire un tuple dont les éléments sont triés
Un tuple peut contenir n’importe quel objet Python
On peut construire des tuples imbriqués