Le n-uplet (tuple)¶
Un n-uplet (appelé tuple en anglais) est une séquence non modifiable de données ordonnées. Cela signifie que chaque élément du tuple est associé à une position (un index). Le premier élément d’un tuple possède l’index 0 et le dernier élément possède l’index n - 1 pour une liste contenant n éléments. Contrairement aux listes, les tuples ne sont pas modifiables.
Créer un tuple¶
Pour créer un tuple, on écrit la séquence des éléments entre parenthèses ()
et
séparés par des virgules :
tuple_vide = ()
mon_tuple = (10, 20, 30, 40)
tuple_depareille = (None, 1, "shrubbery", True)
Comme le montre le tuple_depareille
ci-dessus, un tuple peut contenir
des éléments de types différents. Il peut même contenir un élément ou des
éléments None
, ce qui signifie qu’il contient un élément qui n’est rien.
Astuce
Les parenthèses sont utilisés également pour modifier l’ordre de précellence des opérateurs arithmétiques et logiques. Il y a donc une ambiguïté lorsqu’une seule valeur est mise entre parenthèses :
a = (1)
Pour l’interpréteur Python, a
va contenir l’entier 1. Pour indiquer
que l’on veut créer un tuple d’un seul élément qui vaut 1, il faut écrire :
a = (1,)
Accéder aux éléments¶
Comme pour les listes, pour accéder à un élément d’un tuple, il faut utiliser les crochets et préciser l’index de l’élément.
mon_tuple = (10, 20, 30, 40)
premier_element = mon_tuple[0]
second_element = mon_tuple[1]
Comme pour les listes, il est possible d’utiliser un index négatif pour compter à partir de la fin du tuple. Le dernier élément a l’index -1.
Les opérations sur les tuples¶
On peut effectuer les mêmes opérations sur les tuples que sur les listes pour la consultation. Par définition, il n’est pas possible d’effectuer une opération modifiant le contenu d’un tuple.
Connaître la taille d’un tuple¶
Pour connaître le nombre d’éléments d’un tuple, il faut utiliser la fonction
len()
(qui est la contraction de length) :
mon_tuple = (10, 20, 30, 40)
taille_tuple = len(mon_tuple)
print(taille_tuple)
# affiche 4
Ajouter deux tuples ensemble¶
L’opérateur +
permet d’ajouter deux tuples ensemble pour former un troisième
tuple :
mon_tuple = (0, 1, 2) + (10, 20, 30)
print(mon_tuple)
# affiche (0, 1, 2, 10, 20, 30)
Astuce
Pour augmenter la taille d’un tuple, vous pouvez utiliser l’opération +=
.
Techniquement, le tuple n’est pas modifié, un nouveau tuple est créé et
assigné à la variable à gauche
mon_tuple = (0, 1, 2)
mon_tuple_original = mon_tuple
mon_tuple += (10, 20, 30)
print(mon_tuple)
# affiche (0, 1, 2, 10, 20, 30)
print(mon_tuple == mon_tuple_original)
# affiche False car un nouveau tuple a été créé
print(mon_tuple_original)
# affiche (0, 1, 2)
Créer un tuple étendu¶
L’opérateur *
permet de créer un tuple en répétant le contenu d’un tuple
autant de fois que spécifié :
mon_tuple = ('ni') * 5
print(mon_tuple)
# affiche ('ni', 'ni', 'ni', 'ni', 'ni')
Savoir si un élément est présent dans un tuple¶
Pour savoir si un élément est présent dans un tuple on peut utiliser le mot-clé
in
:
>>> mon_tuple = (1, 2, 3)
>>> 2 in mon_tuple
True
>>> 12 in mon_tuple
False
>>> 12 not in mon_tuple
True
Comparer deux tuples¶
On peut utiliser tous les opérateurs de comparaison entre deux tuples.
>>> mon_tuple = (1, 2, 3)
>>> mon_tuple == (1, 2, 3)
True
>>> mon_tuple != ()
True
>>> mon_tuple < (1, 2, 3, 4)
True
>>> mon_tuple > (1, 2)
True
Pour que deux tuples soient égaux, ils doivent avoir la même taille et contenir des éléments deux à deux identiques.
Connaître le plus grand élément d’un tuple¶
Pour connaître le plus grand élément d’un tuple, il faut utiliser la fonction
max()
:
mon_tuple = (10, 20, 30, 40)
element = max(mon_tuple)
print(element)
# affiche 40
Cela suppose néanmoins que tous les éléments d’un tuple sont comparables et
donc de type similaire sinon on obtient une erreur de type TypeError
.
>>> mon_tuple = (10, "coconut")
>>> element = max(mon_tuple)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: '>' not supported between instances of 'str' and 'int'
Connaître le plus petit élément d’une tuple¶
Pour connaître le plus petit élément d’un tuple, il faut utiliser la fonction
min()
:
mon_tuple = ("a", "b", "c")
element = min(mon_tuple)
print(element)
# affiche a
Comme pour la méthode max()
, cela suppose que tous les éléments d’un
tuple sont comparables et donc de type similaire.
Découper un tuple¶
Il est possible de découper (slice) un tuple. Comme le tuple n’est pas
modifiable, cette opération crée un nouveau tuple et copie les éléments
du tuple originel vers le nouveau tuple. Pour découper, on utilise les
crochets []
avec l’une des notations suivantes :
[index départ : indice supérieur : pas d’incrément]
[index départ : indice supérieur]
mon_tuple = (10, 20, 30, 40)
autre_tuple = mon_tuple[1:3]
print(autre_tuple)
# affiche (20, 30)
mon_tuple = (10, 20, 30, 40)
derniers_elements = mon_tuple[-3:3]
print(derniers_elements)
# affiche (20, 30)
mon_tuple = (1, 2, 3, 4, 5, 6, 7, 8, 9)
nombres_pairs = mon_tuple[1:9:2]
print(nombres_pairs)
# affiche (2, 4, 6, 8)
Par défaut, l’indice de départ est 0, l’indice de fin est nombre d’éléments + 1 et le pas est 1. Vous pouvez omettre ces valeurs.
mon_tuple = (10, 20, 30, 40)
tuple_sauf_dernier_element = mon_tuple[:-1]
print(tuple_sauf_dernier_element)
# affiche (10, 20, 30)
tuple_sauf_premier_element = mon_tuple[1:]
print(tuple_sauf_premier_element)
# affiche (20, 30, 40)
un_sur_deux = mon_tuple[::2]
print(un_sur_deux)
# affiche (10, 30)
Compter les occurrences dans un tuple¶
Pour compter le nombre d’occurrences d’un élément, on utilise la méthode
count(e)
.
mon_tuple = ("John", "Eric", "Michael", "John", "Eric", "John")
occurrence = mon_tuple.count("John")
print(occurrence)
# affiche 3
Listes et tuples¶
Les listes et les tuples sont des séquences, il est donc possible de créer
une tuple à partir d’une liste et réciproquement. Pour cela, on utilise
les méthodes tuple(seq)
et list(seq)
:
mon_tuple = (1, 2, 3)
ma_liste = list(mon_tuple)
print(ma_liste)
# affiche [1, 2, 3]
# on inverse l'ordre des éléments de la liste
ma_liste.reverse()
mon_tuple = tuple(ma_liste)
print(mon_tuple)
# affiche (3, 2, 1)
Attention, ces fonctions ne transforment pas la nature de la séquence,
l’interpréteur crée en mémoire des copies de type list
ou tuple
.
Pourquoi utiliser des tuples plutôt que des listes ? Il s’agit bien souvent d’une optimisation pour l’exécution du code. En effet, un tuple est plus performant qu’une liste. Comme sa structure ne peut pas être modifiée, son implémentation permet un stockage en mémoire plus compact.
Les chaînes de caractères comme tuple¶
Les chaînes de caractères ne sont pas réellement des tuples, néanmoins elles sont des séquences non modifiables de caractères. Il est donc possible de leur appliquer les mêmes opérations.
>>> s = "Good night ding ding ding"
>>> len(s)
25
>>> s[0]
'G'
>>> "ding" in s
True
>>> "dong" not in s
True
>>> s[-4:]
'ding'
>>> s.count("ding")
3
>>> "Good" != s
True
>>> "Good" < s
True
>>> tuple(s)
('G', 'o', 'o', 'd', ' ', 'n', 'i', 'g', 'h', 't', ' ', 'd', 'i', 'n', 'g', ' ', 'd', 'i', 'n', 'g', ' ', 'd', 'i', 'n', 'g')
>>> list(s)
['G', 'o', 'o', 'd', ' ', 'n', 'i', 'g', 'h', 't', ' ', 'd', 'i', 'n', 'g', ' ', 'd', 'i', 'n', 'g', ' ', 'd', 'i', 'n', 'g']