17. Grouper - list
¶
Dans ce chapitre, nous découvrons une nouvelle structure de données - la liste. C’est une séquence ordonnée d’objets quelconques. Contrairement au tuple
qui est immuable, la liste est muable, c’est-à-dire que nous pouvons réassigner ces éléments. Nous allons voir que :
la liste est une séquence d’objets entre crochets tels que
[2, 3, 5]
,la notion d’index
liste[i]
permet d’accéder au i-ème élément de la liste,la notion de tranche
liste[i:j]
permet d’accéder à une sous-liste.
Des groupes d’objets¶
Une liste permet de manipuler des groupes d’objets tels que :
noms d’élèves
notes d’un cours
couleurs
En Python, on peut grouper des objets divers dans une liste. Une liste est ordonnée, ce qui veut dire qu’il y a un premier objet et un dernier objet.
Exercice : Ajoutez une nouvelle liste et affichez-la.
En Python, une liste est délimitée par des crochets []
et ses éléments sont séparés par des virgules ,
.
La fonction len()
¶
La fonction len()
retourne la longueur d’une liste, c’est-à-dire le nombre d’éléments qu’elle contient.
Exercice : Ajoutez des éléments à une liste at affichez de nouveau sa longueur.
La fonction list()
¶
La fonction list()
peut transformer une chaîne de caractères ou une plage numérique en liste.
Index [i]
¶
Nous pouvons accéder à un élément de la liste en utilisant un numéro entre crochets []
, appelé index. L’index d’un élément est toujours un nombre entier. En Python, comme dans beaucoup de langages de programmation, l’index pour le premier élément de la liste est 0 et non pas 1. Ainsi, les éléments d’une liste de longueur n
auront comme premier index 0 et comme dernier index n - 1
.
Un index négatif désigne un élément d’une liste pris depuis la fin de la liste.
Les chaînes de caractères (str
) peuvent aussi être indexées.
Tranche [i:j]
¶
La notation [i:j]
, après le nom d’une variable qui contient une liste, permet d’extraire une sous-liste de la liste. Cette sous-liste, aussi appelée tranche, est une partie de la liste identifiée par les deux index i
et j
.
Exercice : Modifiez l’expression de tranche et exécutez de nouveau.
Itérer sur une liste¶
La boucle for
peut itérer sur les éléments d’une liste. La variable d’itération prend successivement la valeur de chaque élément de la liste.
La pratique est d’utiliser pour la liste un nom de variable au pluriel (noms
) et pour la variable d’itération le même nom au singulier (nom
).
Concaténation¶
L’opérateur +
permet de concaténer (mettre bout à bout) deux listes.
Répétition¶
L’opérateur *
permet de répéter une liste.
Ajouter des éléments¶
Une méthode fonctionne comme une fonction, mais est rattachée à une liste avec la notation (.
).
Par exemple, si a
désigne une liste, on peut ajouter un élément x
à la fin de cette liste avec l’expression a.append(x)
.
Ces trois méthodes permettent toutes d’ajouter des éléments à une liste existante :
append(x)
,extend(iterable)
,insert(i, x)
.
La méthode extend(sequence)
ajoute plusieurs éléments d’une séquence tels qu’une liste ou une chaîne de caractères (texte).
La méthode insert(i, x)
insère un nouveau élément x
à la position i
.
Enlever des éléments¶
Les méthodes suivantes permettent d’enlever des éléments à une liste :
remove(x)
,pop(i)
,clear()
.
La méthode remove(x)
enlève l’élément x
s’il existe, et donne une erreur autrement.
La méthode pop()
enlève le dernier élément.
La méthode pop(i)
enlève l’élément avec l’index i
.
La méthode clear()
enlève tous les éléments.
Opérations¶
Les listes disposent aussi de méthodes avec notation dotée :
liste.sort()
pour trier une liste,liste.reverse()
pour inverser l’ordre des éléments,liste.count(x)
pour compter l’occurrence d’un élément x.
Trier une liste¶
La méthode sort()
trie la liste dans l’ordre croissant (pour les caractères, on se réfère au code ASCII ou UTF utilisé).
Cette méthode fonctionne uniquement si tous les éléments sont du même type (nombre, texte) et peuvent être comparés.
Le programme suivant montre le même tri de liste sous forme graphique.
Exercice : Ajoutez 5 éléments en plus.
Inverser une liste¶
La méthode reverse()
inverse l’ordre de la liste.
De nouveau nous donnons un exemple graphique.
Compter un élément¶
La méthode count(x)
compte le nombre d’occurrences de l’élément x
.
Vecteurs¶
Une liste peut représenter un vecteur. Pour calculer la norme d’un vecteur nous additionnons les carrés des éléments et prenons la racine carrée.
Pour additionner deux vecteurs, il faut additionner chacun de leurs éléments.
Pour multiplier un vecteur avec un scalaire k, il faut multiplier chaque élément avec ce scalaire.
Pour calculer le produit scalaire de deux vecteurs, il faut additionner le produit des éléments des vecteurs.
Compréhension de liste¶
Une compréhension de liste est une spécificité «élégante» du langage Python qui permet de construire de manière compacte des listes sur une seule ligne.
Voici un exemple de construction «traditionnelle» d’une liste où on ajoute un élément après l’autre avec une boucle.
En utilisant la compréhension de liste, on peut construire la même liste sur une seule ligne.
On peut comprendre cette formulation de la manière suivante : la liste cubes indicée par i prend la valeur \(i^3\) pour toutes les valeurs de i de 0 à 9.
Une condition peut être ajoutée dans la compréhension (par exemple, pour n’ajouter à la liste que les valeurs impaires).
L’opérateur %
est l’opérateur modulo qui renvoie le reste de la division.
Nous pouvons alors écrire la formation de cette liste en une seule ligne.
La pile¶
Une pile est une structure de données qui permet de gérer l’arrivée et le départ des éléments. Dans une pile d’assiettes ou de magazines, le dernier élément ajouté est le premier à être enlevé.
En anglais cette structure s’appelle stack ou LIFO (last in first out).
L’exemple suivant est une pile qui accumule des entiers. Si répondez avec une chaîne vide, ceci enlève le dernier élément mis sur la pile, jusqu’à ce que la pile soit vide.
Exercice : Ajoutez des objets (nombres, texte) sur la pile. Enlevez un élément avec Enter.
La file d’attente¶
La file d’attente est une structure de données qui permet de gérer l’arrivée et le départ d’éléments.
Dans une file d’attente devant un guichet, la première personne arrivée est la première à être servi.
En anglais cette structure s’appelle buffer ou encore FIFO (first in first out).
L’exemple suivant est une file d’attente pour des entiers. Si vous répondez avec une chaîne vide, ceci enlève le plus ancien élément de la file, jusqu’à ce que la file soit vide.
Exercice : Ajoutez des objets (nombres, texte) à la file. Enlevez avec Enter.