Le python landais

Les listes.


Plan du chapitre :


1. Définition et opérations élémentaires sur les listes.

..... a. Introduction.
..... b. Définition des listes.
..... c. Les listes sont des objets modifiables.
..... d. Longueur d'une liste.
..... e. Parcourir les éléments d'une liste avec une boucle.

2. Méthodes sur les listes.

..... a. Quelques mots de la programmation orientée objet : POO.
..... b. Méthodes sur les listes

3. Des listes d'objets graphiques.


4. Synthèse.





1) Définition et opérations élémentaires sur les listes.

1)a) Introduction.

Le sujet est très vaste, et nous nous contenterons ici d'une approche très partielle, où nous ne donnerons que les éléments qui seront indispensables dans les projets.

Jusqu'à maintenant, nous sommes contentés de manipuler un petit nombres d'objets dans nos jeux : une balle et une raquette, par exemple. Dans une application plus complexe, nous aimerions faire intervenir plus d'objets, par exemple :


Sur une telle application, le nombre de variables explose : Pour faire tourner l'animation, il nous faut ensuite nous y retrouver dans toutes ces variables, et leurs appliquer à chacune des opérations similaires.
Les listes vont nous permettre d'oublier le nom de toutes ces variables, et de "factoriser le travail" !

De façon plus générale, les listes permettent de stocker et classer un grand nombre de données.



1)b) Définition des listes.

En Python, une liste est une collection d'objets (nombre, caractère, chaîne de caractères, images, item ... ), séparés par des virgules, l'ensemble étant enfermé dans des crochets.

Exemples :

jours = ["lundi", "mardi", "mercredi", "jeudi", "vendredi"]
chiffres = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
composite = [0, "chocolat", 145, "Python", "Landais", 12.1, True]
Regardons alors ce que contient la variable jours :
>>> print(jours)
['lundi', 'mardi', 'mercredi', 'jeudi', 'vendredi']

Remarques :

>>> print(jours[0])
lundi

--> Exercice 1.





1)c) Les listes sont des objets modifiables.

Il est ainsi possible de les modifier tout au long du programme :
>>> liste = [1, 2, 3]
>>> print(liste)
[1, 2, 3]		
>>> liste[1] = 147
>>> print(liste)
[1, 147, 3]
En programmation, on dit ainsi que les objets listes sont "mutables". A l'opposé, d'autres types en Python sont immuables (non modifiables), tels que les chaînes de caractères :
>>> texte = "Bonjour !"
>>> print(texte)
Bonjour !		
>>> texte[1] = 'z'
TypeError: 'str' object does not support item assignment
>>> print(texte)
Bonjour !

--> Exercice 2.





1)d) Longueur d'une liste.

Nous avons déjà constaté que la fonction print pouvait prendre en argument une liste pour l'afficher.
Il en est de même de la fonction len qui renvoie la longueur d'une liste (en anglais : length signifie longueur) :
>>> liste_jours = ['Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi', 'Dimanche']
>>> print(len(liste_jours))
7

Piège : que renvoie l'instruction suivante ?

>>> print(liste_jours[7])
En effet, la numérotation des éléments d'une liste commençant à 0, une liste de longueur 7, a son dernier élément numéroté 6.
De même, une liste à l éléments, voit son dernier élément numéroté l-1. Ceci nous explique, par avance, pourquoi nous rencontrerons souvent "-1".

Que renvoie d'ailleurs l'instruction suivante ?

print(liste_jours[len(liste_jours)-1])




1)e) Parcourir les éléments d'une liste avec une boucle.

On peut assez naturellement envisager de parcourir une liste avec une boucle for :
>>> liste_jours = ['Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi', 'Dimanche']
>>>for compteur in range(0, len(liste_jours)) :
...    print(liste_jours[compteur])
Lundi
Mardi
Mercredi
Jeudi
Vendredi
Samedi
Dimanche
Si ce premier exemple ne semble pas apporter beaucoup plus que la fonction print, il est en réalité bien plus puissant, dans la mesure où il nous permet un accès séquentiel à tous les éléments de la liste, que nous pourrons par exemple modifier :
>>> liste_a_doubler = [0, 1, 2, 3, 4, 5, 6]
>>> for compteur in range(0, 7) :
...    liste_a_doubler[compteur] = 2 * liste_a_doubler[compteur]
>>> print(liste_a_doubler)
[0, 2, 4, 6, 8, 10, 12]

Remarque :

Imaginons un commerçant qui dispose, dans une liste à 5000 éléments, de tous les prix hors-taxes des articles vendus en magasin.
S'il a besoin pour sa comptabilité de la liste des prix TTC, celle-ci est obtenue en à peine 2 lignes de code, au lieu d'avoir 5000 opérations à effectuer !
On commence ainsi à percevoir la puissance de la "factorisation" offerte par les listes !

--> Exercices 3, 4.



Remarque :

ce mécanisme de parcours des listes par les indices sera de loin celui que nous utiliserons le plus dans cette première approche de la programmation.
Il convient cependant de signaler que Python sait faire encore mieux : on peut parcourir les listes directement par les éléments :
>>> liste = [0, 1, 2, 4, 5]
>>> for element in liste :
...    print(element+10)
10
11
12
14
15




2) Méthodes sur les listes.

2)a) Quelques mots de la programmation orientée objet : POO.

Nous avons déjà vu que certaines fonctions intégrées de Python (built-in functions), qui fonctionnnent sur les entiers ou les chaînes de caractères par exemple, peuvent aussi fonctionner avec les listes : print ou len, par exemple.

Nous aimerions maintenant pouvoir ajouter un élément à une liste :
par exemple ajouter 4 à la liste [1, 2, 3], pour qu'elle devienne [1, 2, 3, 4].

C'est possible, mais aucune fonction intégrée de Python ne le fait. Pour cela, nous devrons considérer que la liste est un objet, et utiliser la méthode "append" (en anglais, append signifie ajouter) :

>>> liste = [1, 2, 3]
>>> liste.append(4)
>>> print(liste)
[1, 2, 3, 4]

En python, absolument tout est objet :
un nombre, une chaîne de caractère, une liste, une fonction, une fenêtre (tK()), un widget (canevas, bouton, label...), un item (oval, rectangle, text) : ce sont tous des objets, mais de types différents.

Une méthode, est une sorte de fonction attachée à un type d'objet précis. Ainsi ci-dessus, la méthode "append" est une sorte de fonction intégrée aux objets du type liste. Elle peut, comme les fonctions classiques, prendre des arguments : 4, ci-dessus.
Cette méthode ne pourra bien entendu pas s'appliquer à un objet du type integer :
>>> nombre = 3
>>> nombre.append(4)
AttributeError: 'int' object has no attribute 'append'

La syntaxe pour appeler une méthode sera toujours de la forme :
objet.methode()

Nous avons déjà rencontrées de nombreuses méthodes au chapitre 8 :
bouton.pack()
widget.configure(...)
can.create_image(...)
can.itemconfigure(...)
fen.bind(...)
fen.mainloop()
..............




2)b) Méthodes sur les listes.

Elles sont très nombreuses et nous contenterons pour l'instant de celles intervenants le plus fréquemment dans des projets d'ISN :

La méthode append :

pour ajouter l'élément elem à la fin de la liste liste :
liste.append(elem)
Exemple : construire la liste des nombres pairs de 2 à 26 :
>>> liste = []   # Création d'une liste vide
>>> for i in range(1, 14) :
...    liste.append(2*i)
>>> print(liste)
[2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26]

--> Exercices 5 et 6.




La méthode pop :

pour supprimer l'élément d'indice i de la liste liste :
liste.pop(i)
Exemple : supprimer java dans la liste suivante:
>>> liste = ['Python', 'C++', 'java...beurk !', 'JavaScript']
>>> liste.pop(2)
>>> print(liste)
['Python', 'C++', 'JavaScript']

--> Exercice 7.





3) Des listes d'objets graphiques.

Nous verrons dans le chapitre 10, et dans les projets, de très nombreux exemples d'utilisations des listes d'images ou d'items.
En application de ce qui a été vu dans ce chapitre, il vous est proposé un T.P. où nous verrons comment les listes peuvent nous permettre gérer simultanément, mais independamment, de nombreux objets graphiques :


--> Exercice 8.





4) Synthèse.


Syntaxe Effet
Création de liste
liste = [elem1, elem2, elem3 ...] Crée une liste contenant elem1, elem2, elem3 ...
liste = [] Crée une liste vide
Accès aux éléments de la liste
liste[i] Renvoie l'élément d'indice i de la liste
liste[i] = valeur Affecte valeur à l'élément d'indice i de la liste
Fonctions sur les listes
print(liste) Affiche liste
len(liste) Renvoie le nombre d'élément de la liste
Méthodes sur les listes
liste.append(element) Ajoute elem à la fin de la liste
liste.pop(i) Supprime l'élément d'indice i de la liste