P3.4 Les listes

Prérequis pour ce cours:

  • Les boucles et instructions conditionnelles
  • Les fonctions

Rappel sur le parcours de listes avec les indices

Les listes sont maintenant des objets familiers, vous y êtes habitués. Rappelons ce que nous avons déjà vu, concernant les parcours de listes :

Parcours de liste Avec les indices

Exemple : Parcours de liste sur les indices
Parcours de liste avec les indices

Dans le code ci-dessus on parcours la liste lst, et pour chaque élément on affiche la valeur. Mais ce n'est pas très pratique car pour faire ce parcours séquentiel (on référence séquentiellement les valeurs de la liste) on a besoin, dans le in range(..) de connaître le nombre d'éléments de la liste.

Connaitre la longueur (le nombre d'éléments) d'une liste

la commande len(liste) nous donne le nombre d'éléments de la liste.

Le code ci-dessus peut donc être écrit ainsi :

Exemple : La fonction len()
Parcours de liste avec les indices et la fonction len()

Ajoutez des éléments dans la liste pour observer que le parcours s'effectue toujours correctement sur tousles éléments jusqu'à la fin.

Les Tranches

Vous avez déjà vu comment on peut accéder à la valeur d'un élément du tableau. Il est aussi possible d'accéder à une partie du tableau.

Exemple : Le slicing
les tranches (slices)

Ce code affiche un tableau avec les éléments de lst de l'indice 2 à l'indice 4, c'est à dire [2,3,4]

Souvent on souhaite en réalité une partie de longueur variable, par exemple tous les éléments du tableau à partir du 3ème. Pour cela on omet l'indice de fin, cela signifie : jusqu'à la fin

Exemple : Le slicing
les tranches à part de ... (slices)

Ce code affiche un tableau avec les éléments de lst de l'indice 5 jusqu'à la fin : [5,6,7]

De la même façon on peut omettre l'indice de début, ceci signifiant qu'on prend tout depuis le début :

Exemple : Le slicing
les tranches jusqu'à l'élément ... (slices)

Ce code affiche un tableau avec les éléments de lst du début jusqu'à l'indice 4, c'est à dire [0,1,2,3,4]

Enfin, une spécificité de Python (rarement disponible dans d'autres langages), est d'utiliser une syntaxe avec des valeurs négatives. Les indices négatifs n'existent pas, mais en python ils sont interprété comme "en partant de la fin". Ainsi :

Exemple : Le slicing
les tranches jusqu'à l'élément ... (slices)

Ce code affiche la dernière valeur de lst : 7

Et bien sur on peut combiner cette dernière notation avec les slices :

Exemple : Le slicing
les tranches jusqu'à l'élément ... (slices)

Ce code affiche les valeur de la première à l'avant dernière : [0,1,2,3,4,5,6]

Parcours de liste sur les éléments

parcours de toute une liste

Il existe une autre façon de parcourir une liste, qui n'utilise pas les indices des éléments, mais les éléments eux mêmes :

Exemple : Parcours sur les éléments
les tranches jusqu'à l'élément ... (slices)

Le code ci-dessus parcours aussi la liste lst, et pour chaque élément on affiche la valeur. Mais au lieu d'avoir un indice i allant de 0 à len(lst)-1, i prend successivement les valeurs des éléments de la liste.

Ces deux façons de parcourir une liste sont fondamentales et doivent être bien comprises.

Exercice

double()

Vous donnerez la solution en utilisant un parcours de listes sur les indices.

Exercice de code : double
Ecrire une fonction double(tab) qui renvoi le tableau en remplaçant chaque élément par lui même multiplié par 2.

Ecrire une fonction max_lst(tab) qui renvoi le max d'un tableau.


Vous donnerez la solution en utilisant un parcours de listes sur les indices, puis une autre en utilisant le parcours de liste sur les éléments.

L'algorithme est le suivant :

max ← tab[0]
pour i allant de 1 à N-1 :
    si tab[i]>max:
        max ← tab[i]
renvoyer max

l'algorithme ci contre est donné en faisant un parcours sur les indices, pour le parcours sur les éléments vous devrez adapter...

Exercice de code : Maximum avec parcours sur les indices
Ecrire une fonction max_lst(tab : list) -> float qui renvoie la plus grande valeur du tableau.
Vous ferez un parcours de la liste sur les indices.
Exercice de code : Maximum avec parcours sur les éléments
Ecrire une fonction max_lst(tab : list) -> float qui renvoie la plus grande valeur du tableau.
Vous ferez un parcours de la liste sur les éléments.
Vous ne pouvez pas utiliser la fonction len() dans cet exercice.

Commandes essentielles

Préambule : objets, attributs et méthodes

Python est un langage très orienté objets. Pour le moment vous ne pouvez pas savoir ce que cela signifie mais on va simplement résumer cela en trois idées :

  • Toutes les variables sont des objets.
  • Les objets ont des attributs : des valeurs qui leurs sont attribuées et qu'on peut connaitre avec la syntaxe : objet.attribut
  • Les objets ont aussi des méthodes : ce sont des fonctions qu'on peut utiliser pour faire des opérations variées sur nos objets. Pour utiliser une méthode d'un objet, on utilise la syntaxe : objet.methode()

Pour le moment vous n'avez pas besoin d'en savoir davantage sur les objets, mais vous allez dès à présent découvrir les méthodes de l'objet liste.

Ajouter des éléments en fin de liste

la méthode append() : lst.append(element) ajoute un élément à la fin de la liste.

exemple 1 :

Exemple : Ajouter en fin de liste

exemple 2 :

Exemple : Initialiser une liste avec append

exemple 3 :

Exemple : Un peu différent

Retirer un élément

Il existe plusieurs façon de retirer des éléments d'une liste :

La méthode remove : a.remove(element) retire la 1ère occurence de element dans la listeExemple 1

Exemple : retirer une valeur donnée :

Ce code génère une erreur : ValueError: list.remove(x): x not in list car 13 n'est pas dans la liste.

Exemple : retirer une valeur donnée :

La fonction del : del a[i] supprime l'élément à l'indice i

Ceci n'est pas une méthode à proprement parler et sa syntaxe est donc différente : del a[i] et non a.del(i) comme pour remove ou pop

Exemple : retirer une valeur à l'index i :

a vaut : [1,2,4,3,2,1] après exécution de ce code.

ce code génère une erreur : IndexError: list assignment index out of range car 15 > len(a)

Exemple : retirer une valeur à l'index i :

La méthode pop() : a.pop(i) : supprime l'element d'indice i et renvoie sa valeur.

cette méthode ressemble beaucoup à la précédente mais

  • d'une part c'est une méthode (appel avec a.pop(i) et non pop a[i])
  • par ailleurs, pop renvoie la valeur de l'élément supprimé.

Typiquement c'est la méthode pour un tirage sans remise, type le loto :

Exemple : retirer une valeur à l'index i et récupérer la valeur :
  • Au départ a=[1,2,3,4...49]
  • A chaque tirage on retire un élément, mais du coup, si j'ai retire le 2 par exemple, l'élément d'indice 1 est maintenant 3 car a= [1,3,4...49].
  • Il n'y a donc plus de correspondance entre l'indice et la valeur. Cela permet d'empêcher de tirer 2 fois le même numéro (tirage sans remise) mais pour connaitre la valeur correspondant à l'indice choisi, pop est la meilleure méthode.

Tester la présence d'un élément dans la liste

x in a : True si x est un élément de la liste a, False sinon.


>>> a=[1,2,3,4,3,2,1]
>>> 3 in a
True
>>> 13 in a 
False

Conversion de listes en chaine, et réciproquement

convertir une chaîne en liste :

Exemple : convertir une chaine en liste

Convertir une liste en chaine, avec join :

Exemple : convertir une liste en chaine

D'autres instructions sont importantes et doivent être connues (voir plus ici) mais nous les verrons ultérieurement.

lst.count()

lst.reverse()

lst.index()