36. Notre dernière séquence

Les listes et les chaînes peuvent toutes deux être découpées, en utilisant la notation [::]. Chaque item peut être retrouvé grâce à son indice, c'est-à-dire avec la notation [indice]. Parce qu'ils ont cette propriété, les types de données listes et chaînes sont appelés des séquences. Python a d'autres types de données similaires qui sont des séquences ; l'un des plus connus et le dernier que nous allons voir est appelé le tuple.


La virgule est puissante

Vous vous souvenez que nous avons essayé d'utiliser une virgule en écrivant un grand nombre ? Voici un autre exemple :

>>> 1,000
(1, 0)

Python a pris les deux valeurs séparées par une virgule pour les éléments d'un tuple. Quand il écrit un tuple, Python met des parenthèses autour de lui pour indiquer que c'est un seul objet.

Remarque : si vous obtenez un message d'erreur en essayant un exemple semblable à celui que nous avons montré (mais avec des nombres différents) ou si vous obtenez un résultat que vous ne pouvez pas expliquer par ce que vous avez vu ici, ignorez-le pour le moment. Nous y reviendrons à la fin de cette leçon.

Voici un exemple plus intéressant peut-être.

>>> a = 1, 2, 3, 4, "assez !"
>>> print a
(1, 2, 3, 4, 'assez !')

>>> a[0]
1

>>> a[1:4]
(2, 3, 4)

>>> a[-1]
'assez !'

Nous pouvons aussi mettre des tuples à l'intérieur des tuples. Voici deux exemples :

>>> b = 1, 2, 3

>>> c = 4, 5, b
>>> print c
(4, 5, (1, 2, 3))

>>> d = 1, 2, (3, 4, 5)
>>> print d
(1, 2, (3, 4, 5))

Mis à part l'utilisation des parenthèses () à la place des crochets [], les tuples et les listes pourraient sembler pareils. Mais ils diffèrent d'une manière très importante :

>>> mon_tuple = 1, 2, 3
>>> ma_liste = [1, 2, 3]

>>> print mon_tuple
(1, 2, 3)
>>> print ma_liste
[1, 2, 3]

>>> ma_liste[1] = "nouveau"
>>> print ma_liste
[1, 'nouveau', 3]

>>> mon_tuple[1] = "nouveau"
Traceback (most recent call last):
File "<input>", line 1, in ?
TypeError: object does not support item assignment

Alors que nous pouvons modifier une liste, en changeant un des ses éléments (ou en en ajoutant), nous ne pouvons pas modifier un tuple : il est dit immuable. En plus des nombres, un autre type de données immuable que nous avons vu est la chaîne de caractères :

>>> ma_chaine = "abcd"
>>> ma_chaine[2]
'c'
>>> ma_chaine[2] = "e"
Traceback (most recent call last):
File "<input>", line 1, in ?
TypeError: object does not support item assignment

Puisque les tuples sont immuables, cela veut dire qu'ils peuvent être utilisés comme des clés dans un dictionnaire !


Dictionnaires, listes et tuples

Nous avons déjà vu que Python garde une liste des éléments dans le même ordre que quand nous les créons, mais qu'il imprime à l'écran un dictionnaire dans un ordre qui paraît aléatoire. Nous pouvons voir cela se produire dans le monde de Reeborg.

Cliquez le bouton "Montrer/Cacher le fichier monde" Show/Hide world file pour afficher le fichier monde sur le côté droit. Maintenant, cliquez le bouton "Éditer les murs" edit walls button.

Créez quelques murs, et voyez ce qui se passe dans le fichier monde. Chaque mur créé est un élément d'une liste dont la valeur est un tuple avec les coordonnées du mur. Chaque mur créé est ajouté à la fin de la liste. Quand vous effacez un mur, en cliquant sur un mur existant, il est supprimé de la liste à cet endroit. Si vous cliquez une autre fois immédiatement pour recréer  ce mur, il apparaît dans la liste, où il est encore une fois ajouté à la fin.

Comparez cela avec les sonnettes. Vous pouvez cliquer avec le bouton droit sur n'importe quelle intersection de rue pour indiquer le nombre de sonnettes à y mettre. Si vous changez la valeur des sonnettes à une intersection donnée, elles sont modifiées sur-place. Si vous ajoutez des sonnettes à un endroit où il n'y en avait pas avant, les nouvelles sonnettes ne sont pas, en général, ajoutées à la fin. Vous pourriez avoir besoin de plusieurs intersections avec des sonnettes pour observer cela. Assurez-vous que vous en avez beaucoup. Sélectionnez une intersection avec des sonnettes et mettez la valeur à zéro, en regardant le fichier monde. Comme pour les murs, l'entrée disparaît. Maintenant, remettez immédiatement quelques sonnettes à cette même intersection. La nouvelle entrée apparaît à l'endroit d'origine, et non à la fin comme c'était le cas pour les listes. C'est parce que l'ordre dans lequel les items apparaissent dans un dictionnaire est basé sur une fonction mathématique (de "hachage") de la "clé" du dictionnaire (le tuple avec les coordonnées dans ce cas) que Python sait utiliser efficacement, mais qui le fait apparaître comme aléatoire pour nous.

previousUne autre sorte de définition - home - Arrangeons Reeborgnext