Outils pour utilisateurs

Outils du site


cours:informatique:fun_mooc:python3_uca_inria:320_tuples

Ceci est une ancienne révision du document !


Python: les tuples

Dans cette vidéo, nous allons parler d'un nouveau type built-in qui s'appelle le tuple. Le tuple est très proche de la liste ; comme une liste, c'est une séquence, on peut donc appliquer les opérations comme le test d'appartenance avec *in*, accéder aux différents éléments avec un crochet, faire du *slicing*dessus, et également, un tuple peut référencer des objets complètement hétérogènes. C'est très, très proche de la liste, mais il y a une différence fondamentale entre la liste et le tuple, c'est que le tuple est un objet immuable. Ça veut dire qu'une fois qu'on a créé le tuple, on ne peut plus le modifier. Nous verrons la raison fondamentale de l'existence du tuple, pourquoi est-ce qu'on a besoin d'un objet liste qui est immuable, lorsque nous parlerons des dictionnaires dans une prochaine vidéo. Pour le moment, ouvrons un interpréteur Python pour commencer à jouer avec le tuple.

Commençons par créer un tuple vide. On crée un tuple en écrivant simplement des parenthèses ouvrante et fermante. Ça va donc me créer un objet de type tuple, je peux le vérifier avec type, voilà, c'est un objet tuple qui est simplement vide. Évidemment, comme le tuple est immuable, lorsque je crée un tuple vide, je ne peux rien ajouter donc ce tuple vide a assez peu d'intérêt.

Ensuite, je peux créer un tuple avec un élément, avec la notation suivante t = (4,). Vous remarquez que j'ai rajouté une virgule à la fin de mon premier élément. Vérifions que cet objet est bien un tuple. Si vous écrivez (t = 4) avec des parenthèses sans virgule, pour Python, les parenthèses vont simplement permettre de grouper des opérations, et par conséquent, il va considérer qu'en fait l'objet que vous avez créé est juste un entier qui vaut 4. Donc pour un tuple singleton, un tuple d'un seul élément, il ne faut pas oublier de mettre la virgule.

Ensuite, je peux créer un tuple de plusieurs éléments, qui contient des objets complètement hétérogènes, exactement comme une liste t = (true, 3.4, 18) J'ai donc mon objet tuple. Une caractéristique importante du tuple, c'est que les parenthèses sont facultatives. Regardez, j'enlève les parenthèses, et je vais bien encore obtenir mon objet tuple. Je peux également tout à fait écrire un singleton sans parenthèses, et j'obtiens toujours mon objet tuple. Nous allons voir dans quelques instants pourquoi ces parenthèses ne sont pas nécessaires pour définir un tuple.

Comme le tuple est un objet de type séquence, je peux évidemment faire toutes les opérations que je peux faire sur une séquence. Reprenons un tuple avec un peu plus d'éléments. Je peux regarder est-ce que 3.4 in t et je vois que cet objet de type *float*est bien dans mon tuple ; je peux accéder à des éléments de la manière suivante: t[1], c'est le deuxième élément donc ça va être 3.4, et je peux également faire un slice pour aller du début jusqu'à l'élément 2 exclu, je vous rappelle qu'il va me retourner le premier et le deuxième éléments de mon tuple. Je peux convertir un tuple en liste, j'ai mon tuple t, je peux faire a égale list de t, et mon tuple a été converti en liste, et je peux ensuite repasser de ma liste à un tuple si par exemple, je décide de modifier mon objet en cours d'exécution. Par exemple, je modifie le premier élément et maintenant je le mets égal à False. On voit que ma liste vaut False, 3.4, 18. Je reconvertis cette liste en tuple et je le réaffecte vers ma variable t, j'ai oublié le signe =, donc c'est pour ça que j'ai une erreur de syntaxe. Voilà, maintenant, je vois que j'ai bien le tuple qui vaut False, 3.4 et 18. C'est très important de comprendre cela, le tuple étant immuable, je n'ai pas modifié mon objet tuple ; j'avais un tuple que j'ai converti en objet liste j'ai modifié l'objet liste et j'ai créé un nouvel objet tuple.

Le tuple est très utilisé pour une opération qu'on appelle le tuple unpacking. Qu'est-ce que le tuple unpacking ? C'est quelque chose de très simple, vous avez dans un tuple deux variables, a et b, et vous dites que ces variables sont égales à une séquence qui doit avoir le même nombre d'éléments que le nombre d'éléments que vous avez dans votre tuple. Par exemple, je vais mettre une liste qui vaut 3, 4. J'exécute ça, et je vais voir que ma variable a référence l'entier 3, ma variable b référence l'entier 4. Je vous ai dit que dans le tuple on pouvait enlever les parenthèses. Une des raisons, c'est justement pour alléger cette notation ; vous voyez bien qu'il est beaucoup plus naturel d'écrire a, b égalent 3, 4 que d'écrire le tuple avec des parenthèses (a, b) égale un tuple ou une liste avec des parenthèses ou crochets (3, 4). Cette notation fonctionne parfaitement, ce sont deux tuples mais on a enlevé les parenthèses pour alléger la notation, et je vois bien que maintenant a vaut bien 3, et b vaut bien 4. En Python, il existe également la notion de extended tuple unpacking. C'est une manière simple de pouvoir isoler des éléments lorsque j'ai un grand nombre d'éléments dans une séquence. Prenons un exemple: je vais dire a égale une liste qui contient 10 éléments. J'écris list de range de 10, range, c'est un itérateur qui va me générer 10 éléments et list va convertir chacun de ces éléments dans une liste qui va de 0 jusqu'à 9. Je vois bien que j'ai une liste qui va de 0 jusqu'à 9. Maintenant, supposons que je veuille prendre uniquement le premier élément, et les autres éléments dans un autre objet. Je peux écrire: x, étoile y égalent a Quel va être le résultat de cette opération ? x est égal au premier élément et y va référencer une liste qui va référencer tous les éléments qu'il reste dans a, y va être une liste qui référence 1, 2, 3 jusqu'à 9. Vous pouvez bien évidemment utiliser la notation dans l'autre sens par exemple, faire un étoile de x, y pour obtenir un autre tuple unpacking dans lequel vous allez isoler uniquement le dernier élément. x me référence bien la liste de 0 à 8, et y uniquement 9. Dans cette vidéo, nous avons parlé du tuple. Le tuple est un objet séquence très proche de la liste, dont la principale différence est d'être immuable. Le tuple est utilisé notamment dans des opérations de tuple unpacking, comme nous venons de le voir, mais également par exemple, comme clé de dictionnaire. Nous reviendrons sur cette notion dans une prochaine vidéo.

cours/informatique/fun_mooc/python3_uca_inria/320_tuples.1620054769.txt.gz · Dernière modification : 2021/05/03 15:12 de yoann