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émentLes 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 = eltAvec 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émentsL[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 valeurAvec 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 listeQuelques 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émentIl 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èresOn 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