Les listes font partie de ce qu'on appelle les données composites (nous verrons plus tard les tuples et les dictionnaires). Elles permettent de regrouper de manière structurée des ensembles de valeurs. On les appelle listes en Python, ou bien tableaux de manière plus générale.
Notation : dans une liste, les éléments sont séparés par des virgules, et l'ensemble est délimité par des crochets.
ma_premiere_liste = [1, "ok", True]
Même si cela n'a ici un grand intérêt, les éléments d'une liste peuvent donc être de types différents : ici, nous avons successivement un entier (int
), une chaine de caractères (str
), et un booléen (bool
).
On accède à un élément d'une liste en mettant entre crochets l'indice de l'élémént (qui commence à zéro).
famille = ["Bart", "Lisa", "Maggie"]
famille[0]
Un indice qui dépasse la valeur longueur de la liste -1
provoquera une erreur list index out of range
.
famille[3]
Il est par contre possible d'utiliser des indices négatifs :
famille[-1]
La longueur d'une liste sera donnée par la fonction len()
len(famille)
Attention : le dernier élément de la liste a donc l'indice len(liste)-1
for k in range(len(famille)):
print(famille[k])
Remarque : nous avons déjà vu une méthode plus directe de parcours d'une liste :
for k in famille : # <- beaucoup plus efficace !
print(k)
C'est une différence fondamentale avec une autre structure (les tuples) que nous verrons plus tard.
famille[0] = "Milhouse"
famille
On dit que les listes sont des objets mutables.
famille.append("Lisa")
famille
La méthode append()
rajoute donc un élément à la fin de la liste.
Très souvent, la méthode append()
ci-dessus est utilisée à partir d'une liste vide []
, à laquelle on rajoute peu à peu des éléments.
Filtrons la liste m ci-dessous pour n'en garder que les éléments supérieurs à 20.
m = [45, 12, 15, 20, 18, 19, 23, 17, 12, 18]
p = []
for k in m :
if k > 20:
p.append(k)
famille.remove("Lisa")
famille
La méthode remove()
va supprimer le premier élément de la liste (ce qui est problématique s'il y en a plusieurs) qui correspond à l'élément passé en argument.
maliste = [8, 4, 2, 4, 7]
maliste.remove(4)
maliste
maliste.remove(5)
La fonction del()
permet de supprimer un élément en donnant son indice.
maliste = [8, 4, 2, 5, 7]
del maliste[3]
maliste
Trouvez le nombre qui est exactement à la même place dans la liste a
et dans la liste b
(les deux listes ont la même taille)
a = [8468, 4560, 3941, 3328, 7, 9910, 9208, 8400, 6502, 1076, 5921, 6720, 948, 9561, 7391, 7745, 9007, 9707, 4370, 9636, 5265, 2638, 8919, 7814, 5142, 1060, 6971, 4065, 4629, 4490, 2480, 9180, 5623, 6600, 1764, 9846, 7605, 8271, 4681, 2818, 832, 5280, 3170, 8965, 4332, 3198, 9454, 2025, 2373, 4067]
b = [9093, 2559, 9664, 8075, 4525, 5847, 67, 8932, 5049, 5241, 5886, 1393, 9413, 8872, 2560, 4636, 9004, 7586, 1461, 350, 2627, 2187, 7778, 8933, 351, 7097, 356, 4110, 1393, 4864, 1088, 3904, 5623, 8040, 7273, 1114, 4394, 4108, 7123, 8001, 5715, 7215, 7460, 5829, 9513, 1256, 4052, 1585, 1608, 3941]
"""placer ici votre programme"""
p = [0]*12
p
Cette instruction est très utile pour initialiser des listes de taille donnée.
le code ci-dessous compte l'occurence de chaque lettre de l'alphabet dans un texte.
texte = "ce texte est prodigieusement ennuyeux"
def rang(lettre):
return(ord(lettre)-97)
compt = [0]*26
for k in texte :
if k != " " :
compt[rang(k)] += 1
compt
nombres = [k for k in range(10)]
nombres
Il est bien sûr possible d'agir sur le paramètre :
carres_parfaits = [k**2 for k in range(10)]
carres_parfaits
Plus subtil, on peut filtrer "à la volée" les éléments pour n'en garder que certains.
c = [n for n in carres_parfaits if n % 3 == 0]
c
En une ligne, créez la liste p
qui contient tous les éléments positifs de m
.
m = [-3, -6, 4, 7, -2, 1, -3, 5]
p = ["..."]
p
a = 3
b = a
a = 5
id(a)
id(b)
b
a = [4, 5, 7]
b = a
a[0] = 12
Selon toute vraisemblance, la liste a
est maintenant égale à [12, 5, 7]
.
Vérifions-le :
id(a)
id(b)
a
Tout est donc normal. Mais :
b
b
est lui aussi devenu égal à [12, 5, 7]
, alors que la modification sur l'élément a[0]
n'a été faite qu'après l'affectation b = a
.
Les listes a
et b
sont en fait strictement et définitivement identiques, elles sont simplement deux dénominations différentes d'un même objet.
On peut le vérifier en regardant l'emplacement-mémoire vers lequel pointent la variable a
et la variable b
:
id(a)
id(b)
Parmi plusieurs solutions, celle-ci est simple et efficace : la méthode copy()
a = [3, 4, 9]
b = a.copy()
a[0] = 12
a
b
On pourrait aussi écrire b = list(a)
mais la méthode copy()
a l'avantage d'exister aussi pour les dictionnaires, que nous verrons plus tard.
a = [[3, 5, 2],
[7, 1, 4],
[8, 6, 9]]
La liste a
est composée de 3 éléments qui sont eux-même des listes de 3 éléments.
a[0]
a[0][1]
a[2][2]