Outils pour utilisateurs

Outils du site


dev:python:core:tuples

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
dev:python:core:tuples [2020/12/17 18:26] – ↷ Nom de la page changé de dev:python:core:typles à dev:python:core:tuples yoanndev:python:core:tuples [2023/12/02 18:35] (Version actuelle) yoann
Ligne 4: Ligne 4:
  
  
-le **tuple** est un type built-in très proche de la liste: c'est une séquence, on peut donc y appliquer les opérations telles que: +le **tuple** (traduit couple ou n-uplets) est un type builtin très proche de la liste mais **immuable**: c'est une séquence, on peut donc y appliquer les opérations telles que:
-  * le test d'appartenance avec **in**, +
-  * 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'objet créé en mémoire il ne sera pas modifié.+  * Accéder aux éléments avec l’opérateur d'indexation **[]** ; 
 +  * Le test d'appartenance avec **in** ; 
 +  * 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'objet créé en mémoire il ne sera pas modifié.
  
 <note> <note>
Ligne 15: Ligne 16:
 </note> </note>
  
-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 contenant les éléments séparés par des virgules. Comme une liste, un tuple peut contenir des éléments de types différents. 
 <code python> <code python>
->>> t1 = ()+>>> (1, 2, 3) 
 +(1, 2, 3)
  
->>> type(t1+>>> ('a', 'b', 'c'
-tuple+('a', 'b', 'c'
 + 
 +>>> (42, '!'
 +(42, '!'
 +</code> 
 + 
 +On notera tout de même que les parenthèses sont facultatives, c’est la virgule qui définit réellement un tuple. Comme pour les opérations arithmétiques, les parenthèses servent en fait à gérer les priorités et mettre en valeur le tuple. 
 + 
 +<code python> 
 +>>> 1, 2, 3 
 +(1, 2, 3) 
 + 
 +>>> 1, 2, 3 * 3 
 +(1, 2, 9) 
 + 
 +>>> (1, 2, 3) * 3 
 +(1, 2, 3, 1, 2, 3, 1, 2, 3)
 </code> </code>
  
-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'opérations c'est à dire un changement de priorité mais bien comme la création d'un objet de type tuple:            les parenthèse comme un groupement d'opérations c'est à dire un changement de priorité mais bien comme la création d'un objet de type tuple:           
 +
 <code python> <code python>
-# Ces instructions NE créent PAS de tuple!+>>> # Ces instructions NE créent PAS de tuple!
 >>> t1 = (3) >>> t1 = (3)
 >>> type(t1)                                                                                     >>> type(t1)                                                                                    
Ligne 42: Ligne 61:
 tuple tuple
  
->>> t2 = ('4',)+>>> t2 = '4',
 >>> type(t2) >>> type(t2)
 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 la virgule.+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 la virgule.
 </note> </note>
 +
 +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>
 +>>> tp = ()
 +
 +>>> type(tp)
 +<class 'tuple'>
 +</code>
  
 Pour cette raison, pour lever toute ambiguïté et se conformer aux recommandations, il vaut mieux toujours terminer les lignes de définitions des tuples et listes par une virgule et répartir les éléments sur plusieurs lignes n’excédant pas 79 caractères. Pour cette raison, pour lever toute ambiguïté et se conformer aux recommandations, il vaut mieux toujours terminer les lignes de définitions des tuples et listes par une virgule et répartir les éléments sur plusieurs lignes n’excédant pas 79 caractères.
Ligne 60: Ligne 88:
 </code>  </code> 
  
-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 que les listes.
  
 <code python> <code python>
-# un tuple +>>> (1, 2, 3) < (1, 2, 4) 
->>> t1 = (1, 2, 'trois''4', 5.0) +True
->>> type(t1+
-tuple+
  
-# cette instruction définie également un tuple: +>>> (1, 2, 3) <(1, 2, 2) 
->>> t2 = 'un', 23.0, '4',  +False 
->>> type(t2+</code> 
-tuple+ 
 +Les fonctions **''len''****''min''****''max''****''all''****''any''** etc. sont aussi applicables aux tuples. 
 + 
 +<code python> 
 +>>> len(values) 
 +
 + 
 +>>> min(values) 
 +
 + 
 +>>> max(values) 
 +
 + 
 +>>> all((True, True, False)) 
 +False 
 + 
 +>>> any((True, True, False)
 +True
 </code> </code>
  
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'usage du tuple =====
 +
 +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, ou si l’on veut empêcher toute modification.
 +
 +Mais il y a aussi des opérations qui ne sont possibles qu’avec les tuples. **Étant non modifiables, ils peuvent être utilisés en tant que clés de dictionnaires**.
 +
 +<code python>
 +>>> worldmap = {(0, 0): 'x', (0, 1): '.', (1, 0): '.', (1, 1): 'x'}
 +>>> worldmap[(1, 0)]
 +'.'
 +
 +>>> worldmap[(1, 1)] = ' '
 +>>> worldmap
 +{(0, 0): 'x', (0, 1): '.', (1, 0): '.', (1, 1): ' '}
 +
 +
 +>>> # Les parenthèses sont encore une fois facultatives lors des accès.
 +>>> worldmap[0, 0]
 +'x'
 +</code>
 +
 +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>
 +>>> events = ('29/05/2019', ['anniversaire', 'soirée'])
 +>>> events[1].append('rdv coiffeur')
 +>>> events
 +('29/05/2019', ['anniversaire', 'soirée', 'rdv coiffeur'])
 +</code>
 +
 +**Un tel tuple ne pourra donc pas être utilisé comme clé de dictionnaire**, parce qu’il contient une liste qui ne peut pas être utilisée comme tel.
 +
 +<code python>
 +>>> {events: None}
 +Traceback (most recent call last):
 +  File "<stdin>", line 1, in <module>
 +TypeError: unhashable type: 'list'
 +</code>
 +
 +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>
 +>>> a, b = 1, 2
 +>>> a
 +1
 +
 +>>> b
 +2
 +</code>
 +
 +Techniquement, cela revient à écrire (a, b) = (1, 2), ou encore :
 +<code python>
 +>>> tmp = (1, 2)
 +>>> (a, b) = tmp
 +</code>
 +
  
 ===== tuple unpacking ===== ===== tuple unpacking =====
Ligne 150: Ligne 255:
   * Que le terme à gauche du signe '=' soit un tuple ou une liste   * Que le terme à gauche du signe '=' soit un tuple ou une liste
   * 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'unpacking de tuples est qu’elle permet facilement d’échanger les valeurs de deux variables. En effet, il suffit de construire un tuple avec les valeurs des deux variables puis de le déconstruire vers ces deux mêmes variables en les inversant.
 +
 +<code python>
 +>>> a = 3
 +>>> b = 5
 +
 +>>> a, b = b, a
 +
 +>>> a
 +5
 +
 +>>> b
 +3
 +</code>
  
  
Ligne 186: Ligne 307:
 </code> </code>
 On voit bien ici que la variable t1 ne référence plus le même objet en mémoire après l'opération d'addition. On voit bien ici que la variable t1 ne référence plus le même objet en mémoire après l'opération d'addition.
 +
 +===== Références =====
 +
 +  * [[https://zestedesavoir.com/tutoriels/2514/un-zeste-de-python/4-types/4-tuples/|Tutoriel un zeste de Python - Les tuples]]
dev/python/core/tuples.1608229562.txt.gz · Dernière modification : 2021/02/01 21:51 (modification externe)