Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
dev:python:core:tuples [2021/02/01 21:51] – modification externe 127.0.0.1 | dev:python:core:tuples [2023/12/02 18:35] (Version actuelle) – yoann | ||
---|---|---|---|
Ligne 4: | Ligne 4: | ||
- | le **tuple** est un type built-in | + | le **tuple** |
- | * le test d' | + | |
- | * accéder aux éléments avec **[]**, | + | |
- | * faire du slicing etc | + | |
- | La différence fondamentale entre la liste et le tuple est que le tuple est un objet immuable: une fois l' | + | * Accéder aux éléments avec l’opérateur d' |
+ | * Le test d' | ||
+ | * Faire du slicing etc | ||
+ | |||
+ | La différence fondamentale entre la liste et le tuple est que le tuple est un objet **immuable**: une fois l' | ||
< | < | ||
Ligne 15: | Ligne 16: | ||
</ | </ | ||
- | Pour créer un objet de type tuple on utilise les parenthèses: | + | Un tuple est généralement défini par une paire de parenthèses |
<code python> | <code python> | ||
- | >>> | + | >>> |
+ | (1, 2, 3) | ||
- | >>> | + | >>> |
- | tuple | + | (' |
+ | |||
+ | >>> | ||
+ | (42, ' | ||
+ | </ | ||
+ | |||
+ | On notera tout de même que les parenthèses sont facultatives, | ||
+ | |||
+ | <code python> | ||
+ | >>> | ||
+ | (1, 2, 3) | ||
+ | |||
+ | >>> | ||
+ | (1, 2, 9) | ||
+ | |||
+ | >>> | ||
+ | (1, 2, 3, 1, 2, 3, 1, 2, 3) | ||
</ | </ | ||
- | Ci-dessus instanciation d'un tuple vide. | ||
Attention à la syntaxe lors de la création d'un tuple contenant un seul élément. Il doit bien être obligatoirement suivi par la virgule afin que l’interpréteur ne considère pas | Attention à la syntaxe lors de la création d'un tuple contenant un seul élément. Il doit bien être obligatoirement suivi par la virgule afin que l’interpréteur ne considère pas | ||
les parenthèse comme un groupement d' | les parenthèse comme un groupement d' | ||
+ | |||
<code python> | <code python> | ||
- | # Ces instructions NE créent PAS de tuple! | + | >>> |
>>> | >>> | ||
>>> | >>> | ||
Ligne 42: | Ligne 61: | ||
tuple | tuple | ||
- | >>> | + | >>> |
>>> | >>> | ||
tuple | tuple | ||
Ligne 48: | Ligne 67: | ||
<note warning> | <note warning> | ||
- | Pour un tuple singleton, c'est à dire un tuple d'un seul élément il ne faut pas oublier de mettre | + | Comme montré ci-dessus, pour un tuple singleton, c'est à dire un tuple d'un seul élément il ne faut pas oublier de placer |
</ | </ | ||
+ | |||
+ | Par ailleurs, il est possible de définir un tuple vide à l’aide d’une simple paire de parenthèses (il n’y a dans ce cas pas de confusion avec d’autres utilisations possibles des parenthèses). | ||
+ | |||
+ | <code python> | ||
+ | >>> | ||
+ | |||
+ | >>> | ||
+ | <class ' | ||
+ | </ | ||
Pour cette raison, pour lever toute ambiguïté et se conformer aux recommandations, | Pour cette raison, pour lever toute ambiguïté et se conformer aux recommandations, | ||
Ligne 60: | Ligne 88: | ||
</ | </ | ||
- | Une autre caractéristique importante pour la définition d'un tuple est que les parenthèses sont facultatives: | + | ===== Ordonnancement ===== |
+ | |||
+ | Les tuples sont ordonnables les uns par rapport aux autres, de la même manière | ||
<code python> | <code python> | ||
- | # un tuple | + | >>> |
- | >>> | + | True |
- | >>> | + | |
- | tuple | + | |
- | # cette instruction définie également un tuple: | + | >>> |
- | >>> | + | False |
- | >>> | + | </ |
- | tuple | + | |
+ | Les fonctions **'' | ||
+ | |||
+ | <code python> | ||
+ | >>> len(values) | ||
+ | 3 | ||
+ | |||
+ | >>> | ||
+ | 4 | ||
+ | |||
+ | >>> | ||
+ | 6 | ||
+ | |||
+ | >>> | ||
+ | False | ||
+ | |||
+ | >>> | ||
+ | True | ||
</ | </ | ||
Ligne 101: | Ligne 146: | ||
Le tuple étant immuable, on a bien créé une liste à partir du tuple, modifié la liste puis créer un nouvel objet tuple. | Le tuple étant immuable, on a bien créé une liste à partir du tuple, modifié la liste puis créer un nouvel objet tuple. | ||
+ | |||
+ | |||
+ | ===== Cas d' | ||
+ | |||
+ | On peut parfois se demander quand utiliser un tuple et quand utiliser une liste. Le tuple étant comparable à une liste non modifiable, il peut donc être utilisé pour toutes les opérations attendant une liste et ne cherchant pas à la modifier. Il est même préférable de l’utiliser si l’on sait qu’il ne sera jamais question de modification, | ||
+ | |||
+ | Mais il y a aussi des opérations qui ne sont possibles qu’avec les tuples. **Étant non modifiables, | ||
+ | |||
+ | <code python> | ||
+ | >>> | ||
+ | >>> | ||
+ | ' | ||
+ | |||
+ | >>> | ||
+ | >>> | ||
+ | {(0, 0): ' | ||
+ | |||
+ | |||
+ | >>> | ||
+ | >>> | ||
+ | ' | ||
+ | </ | ||
+ | |||
+ | Cette structure permet ainsi de représenter d’une grille de données où chaque case est associée à ses coordonnées. | ||
+ | |||
+ | Si un tuple contient une liste, rien n’empêche d’ajouter des éléments à cette liste. | ||
+ | |||
+ | <code python> | ||
+ | >>> | ||
+ | >>> | ||
+ | >>> | ||
+ | (' | ||
+ | </ | ||
+ | |||
+ | **Un tel tuple ne pourra donc pas être utilisé comme clé de dictionnaire**, | ||
+ | |||
+ | <code python> | ||
+ | >>> | ||
+ | Traceback (most recent call last): | ||
+ | File "< | ||
+ | TypeError: unhashable type: ' | ||
+ | </ | ||
+ | |||
+ | Mais beaucoup d’utilisations des tuples sont tous simplement implicites. C’est en effet une manière de faire des assignations multiples de variables. | ||
+ | |||
+ | <code python> | ||
+ | >>> | ||
+ | >>> | ||
+ | 1 | ||
+ | |||
+ | >>> | ||
+ | 2 | ||
+ | </ | ||
+ | |||
+ | Techniquement, | ||
+ | <code python> | ||
+ | >>> | ||
+ | >>> | ||
+ | </ | ||
+ | |||
===== tuple unpacking ===== | ===== tuple unpacking ===== | ||
Ligne 150: | Ligne 255: | ||
* Que le terme à gauche du signe ' | * Que le terme à gauche du signe ' | ||
* les deux termes aient la même longueur ou utilisent la notation *arg voir section extend unpacking. | * les deux termes aient la même longueur ou utilisent la notation *arg voir section extend unpacking. | ||
+ | |||
+ | |||
+ | Une propriété amusante de l' | ||
+ | |||
+ | <code python> | ||
+ | >>> | ||
+ | >>> | ||
+ | |||
+ | >>> | ||
+ | |||
+ | >>> | ||
+ | 5 | ||
+ | |||
+ | >>> | ||
+ | 3 | ||
+ | </ | ||
Ligne 186: | Ligne 307: | ||
</ | </ | ||
On voit bien ici que la variable t1 ne référence plus le même objet en mémoire après l' | On voit bien ici que la variable t1 ne référence plus le même objet en mémoire après l' | ||
+ | |||
+ | ===== Références ===== | ||
+ | |||
+ | * [[https:// |