Les listes

Une liste est un objet pouvant en contenir d’autres (de tout type), organisés séquentiellement (les uns à la suite des autres).

Accès aux éléments d’une liste

Une liste est ordonnée : on accède à ses éléments en indiquant leur indice (index en anglais).

ATTENTION : il ne faut pas nommer la variable list , sous peine de « cacher » l’instruction Python list()  : le nom list  ferait alors référence à la variable list  et plus à la fonction list()  , qui ne serait plus disponible, tant qu’on n’aurait pas détruit la variable list  par l’instruction del list .

Liste = objet muable

Les listes sont des objets muables (mutable en anglais).

objet immuable
objet muable

Exercice :

Prédire (AVANT d’utiliser Python) les valeurs de lst1  et lst2  après le suite d’instructions suivante :

 

Découpage ou Slicing

Le slicing (saucissonage) permet d’obtenir une sous-liste depuis une liste.

La syntaxe est la suivante (en gros 7 possibilités) :

  • debut : indice du premier éléments à sélectionner (par défaut : le premier élément de la liste)
  • fin : indice du dernier élément exclu à sélectionner (par défaut : le dernier élément de la liste)
  • pas : 1 par défaut

Pour extraire une sous-liste, il faut imaginer que les indices représentent non pas les tranches de saucisson, mais les coups de couteau qui vont permettre de couper les tranches (en partant de 0 pour l’entame).

sclicing

Ainsi :

Exercices :

  • Tester les instructions suivantes :
  • Écrire une instruction qui permet d’obtenir la liste inverse d’une liste, uniquement par slicing.

Créer une liste

par la fonction range()

Remarque : depuis la version 3 de Python, la fonction range()  renvoie un objet de type  range (un itérateur) , et non une liste. Pour afficher son contenu, on peut le convertir en liste, grâce à l’instruction list()  :

par compréhension

Remarque : pour des détails sur la structure for...in... , voir la page les boucles.

 

Modifier une liste

par opérations

Deux opérateurs sont reconnus :

  • l’addition de deux listes : liste1 + liste2
  • la multiplication par un entier : liste * entier

par ajout d’éléments

  • ajout à la fin :
  • insertion :

par remplacement d’éléments

On peut également remplacer une portion entière de la liste, en utilisant le slicing :

par suppression d’éléments

Ou également grâce à la méthode .remove()  :
 

Copier une liste

par « slicing »

avec le constructeur list()

 

Trier une liste

Tri sur place

Tri avec copie

Les fonctions de tri peuvent admettre un deuxième argument key  qui spécifie une fonction à un seul argument fournissant une clef de comparaison de la liste à trier.

Par exemple, pour trier une liste de tuples selon leur élément d’indice 1 :

Remarque : f = lambda x: x**2  est l’équivalent Python de $f:x \rightarrow x^2$

Exercices :

desLa liste suivante contient les résultats de plusieurs lancés de 2 dés (c’est une liste de listes) :

l = [[1,5], [2,3], [6,4], [5,6], [3,2], [4,1], [2,5]]

Trier cette liste dans l’ordre décroissant de la somme des deux dés, grâce à l’instruction sorted()  et en utilisant son argument key .

Inverser une liste

(Dé)Zipper une liste

Le « zippage » est une opération qui permet de combiner deux listes de même taille. La fonction zip()  opère en quelque sorte une transposition de tableau (si on considère qu’un tableau est une liste de listes !) :

Chercher un élément dans une liste

La méthode .index()  permet d’obtenir l’indice d’un élément contenu dans une liste.

Attention :

  • Si l’élément recherché n’est pas dans la liste, .index()  renvoie un message d’erreur.

Il faudra donc tester l’appartenance de l’élément à la liste avant d’appeler .index()  (voir page structures conditionnelles), ou bien intercepter l’erreur pour éviter que l’exécution du programme ne s’arrête (voir structure try ... except ... ).

  • S’il existe plusieurs éléments identiques dans la liste, seul l’indice du premier sera renvoyé.

 

Exercices

  1. Générer, en une seule instruction, la liste des boules numérotées du Loto.
  2. Écrire une instruction permettant de récupérer un élément au hasard dans une liste.
  3. Écrire une fonction permettant de piocher un élément au hasard dans une liste, de telle sorte que l’élément pioché n’y figure ensuite plus.
  4. octavesSoit gamme = ['Do', 'Ré', 'Mi', 'Fa', 'Sol', 'La', 'Si']. Écrire une suite d’instructions qui génère à partir de gamme  la liste de toutes les notes de la gamme sur 4 octaves, sous la forme ['Do_1', 'Ré_1, ..., 'Si_4'].
  5. Supprimer en une seule opération la gamme 2.

 

Autres exercices sur les listes

Dépôt de fichier réponse

Vous aimerez aussi...

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

*

code