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:

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 liste

  • La 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