Petit cours brouillon
Python: Exercices > Exercices sur les listes > Petit cours brouillon
Les listes

Création basique d'une liste

Les listes en python sont des séquences. Elles peuvent contenir plusieurs variables. Les listes s'écrivent de la manière suivante :
L = ["a",8,1,3]
On observe là que les listes peuvent contenir des variables de types différents, tel qu'une chaîne de caractères, des nombres flottants, des booléens... et même des listes ! Pour initialiser une liste L vide il suffit d'écrire ceci :
L = [ ]


Les indices et la modification d'un élément
Les listes fonctionnent par indexation : le premier élément de la liste L (ici "a") est appelé par L[0], le second par L[1]...
Les listes sont des éléments mutables. Donc on peut modifier les éléments de L lorsqu'il existe :
L[0] = 0 permet d'obtenir L = [0,8,1,3].
Cependant, L[6] n'est pas autorisé car la liste n'a pas de 7ième élément. L'erreur "Index out of range" est alors levé. Mais attention !, L[-1] fonctionne : il fait référence au dernier élément de la liste (c'est très utile lorsque l'on ne connait pas la taille de la liste).
La taille de la liste (i.e le nombre d'éléments qu'elle comporte) peut s'obtenir avec len(L).

Exercices : L1 recherche d'un élément, L2 maximum d'une liste, L3 tri par sélection, L5 égalité entre deux listes, L7 permutation.


Le parcours d'une liste
Le parcours d'une liste peut, par exemple, se faire à l'aide d'une boucle for. Voici deux méthodes :

for elt in L:
    a = elt
for i in range(len(L)):
     a = L[i]

Récupère directement chaque élément de L.
range(len(L)) crée une liste d'entier allant de  0 à len(L)-1.
Chaque élément de cette liste représente ici l'indice de l'élément à afficher.
On récupère l'élément qui nous intéresse avec L[i].

La méthode enumerate permet également de récupérer l'indice de l'élément :
for ind, elt in enumerate(L):
    a = elt

Avec ind l'indice de l'élément elt.

Remarque :
        - Pour indication, voici un petit test pour comparer le temps d’exécution des trois méthodes:[Afficher]
import time

L = range(5000000)

start = time.time()
for i in range(len(L)):
    a = L[i]
print(time.time()-start)

start = time.time()
for elt in L:
    a = elt
print(timetime()-start)
      

start = time.time()
for ind, elt in enumerate(L):
    a = elt
print(time.time()-start)
La méthode utilisant seulement in est la plus rapide : elle met environ 0.3s pour parcourir la liste des entiers de 0 à 5000000 contre environ 1s pour la méthode avec range. La méthode enumerate met 0.6s mais donne à la fois l'indice et l'élément !
        - En Python 2 il est préférable d'utiliser xrange à la place de range car à la place de crée une liste d'entier, xrange crée un compteur ce qui prend moins de temps !

La compréhension de liste.
Un autre outil pour générer une liste est "la compréhension de liste". Il s'agit (en simplifié!) de la création d'une liste à partir de la sélection de certains éléments d'une autre liste.
Voici des exemples de listes générées avec L = ["courgette", "poivron", "tomate", "fraise", "riz"] et M  = [1,2]

        - [i for i in range(10) if i%2 == 0] donne [0, 2, 4, 6, 8], c'est à dire la liste des pairs de 0 à 10 exclu. En effet :  range(10) est la liste des entiers de 0 à 10 exclu et i%2 est égale à 0 lorsque i est pair.
        - [elt for elt in L if len(elt) <= 6] donne ["tomate", "fraise", "riz"], c'est à dire la liste des éléments de L dont la longueurs est supérieure ou égale à 6. 
        - [ (i, elt) for i in M for elt in L ] donne [(1,'courgette'), (1, 'poivron'), (1, 'tomate'), (1, 'fraise'), (2, 'courgette'), (2, 'poivron'), (2, 'tomate'), (2, 'fraise')]

Exercice : L11 compréhension de liste

Ajouter/suppression d'un élément en fin de liste
Pour ajouter un élément à la fin d'une liste on peut utiliser la méthode L.append(elt), avec L la liste dans laquelle on veut ajouter l'élément elt.
De même, on peut supprimer le dernier élément d'une liste à l'aide de la fonction L.pop( ). Cette fonction renvoie également l'élément supprimé.

Exercice : L4 maximum élément par élément


Récupération/Modification de plusieurs éléments

L[n:m] permet de récupérer la liste des éléments allant de l'indice n à m-1. Ainsi, pour L = ["a",8,1,3,"carottes",[1,0,0],[2,"r",0.2]] :
         - L[3:6] donne [3,"carottes",[1,0,0]]
         - L[3:]
donne toute la liste à partir de l'indice 3, i.e [3,"carottes",[1,0,0],[2,"r",0.2]]
         - L[:3] donne toute la liste jusqu'à l'indice 3 exclu, i.e ["a",8,1]

Exercice : L6 égalité entre deux listes (récursive)


Trouver l'indice d'une valeur
Avec L[i] on sait trouver une valeur à l'aide de son indice, mais comment trouver l'indice d'une valeur connue ?
Il suffit d'utiliser la méthode index ! Voici un petit exemple sur la liste L de tout à l'heure :
L.index("carottes") renvoie l'indice 4. Attention ! Si plusieurs éléments ont la même valeur, index renverra l'indice la plus faible.


Calcul sur toute une liste
Quelques fonctions existent pour faire des calculs simples avec tous les éléments d'une liste. Par exemple, pour sommer tous les éléments d'une liste on peut faire appel à la fonction sum. Pour L = [1,2,3] :
sum(L) renvoie 6 Attention ! Il faut que les éléments de la liste soient bien des nombres...
De même, les fonctions min et max existent.
min(L) renvoie 1. max(L) renvoie 3.

Exercice : L8 Simple manipulation


Supprimer un élément
Il y a plusieurs façons de supprimer un élément d'une liste. Pour supprimer un élément dont on connait l'indice on peut utiliser la fonction del. Sur la liste L =["a",8,1,3] par exemple :
del L[2]
supprime l’élément d'indice 2 donc L vaut maintenant ["a",8,3].
On peut également supprimer un élément à partir de sa valeur avec la méthode remove, par exemple : L.remove("a") donne L = [8,1,3].
Attention !
Si plusieurs éléments ont la même valeur, remove supprimera celui d'indice le plus faible. Pour L = ["t","u","t","t","i","c","o","d","e"], L.remove("t") devra être exécuté trois fois pour donner L = ["u","i","c","o","d","e"].

Exercice : L9 Opossum

Liste et chaine de caractères

On peut découper une chaîne de caractères telle que texte = "La beauté est dans les yeux de celui qui regarde. Oscar Wilde"et placer tous les éléments dans une liste. La méthode utilisée est split. Elle prend en paramètre la chaîne de caractères qui sert de séparateur entre les éléments. Par exemple :
texte.split(" ") donne la liste ["La", "beauté", "est", "dans", "les", "yeux", "de", "celui", "qui", "regarde.", "Oscar", "Wilde"]

Exercices : L10 Split, C6 Mélange interne d'une phrase

On peut également crée une liste de caractères à partir d'une chaîne de caractères :
list(c) avec c = "C'est en essayant encore et encore que le signe apprend à bondir" donne ["C","'","e","s","t"," ","e","n"," ","e","s","s","a","y","a","n","t"," ","e","n","c","o","r","e"," ","e","t"," ","e","n","c","o","r","e"," ","q","u","e"," ","l","e"," ","s","i","n","g","e"," ","a","p","p","r","e","n","d"," ","à"," ","b","o","n","d","i","r"]

Exercice : C4 Mélanger du texte