Parcours de listes
La boucle for permet de parcourir <parcours de liste> une liste, en
accédant tour à tour à chacun de ses éléments:
liste = ["a", "b", "c", "d"]for element in liste:
print(element)a
b
c
d
Chaque élément de liste a été affecté tour à tour à element, puis le bloc
d’instruction a été exécuté déclenchant son affichage.
Dans l’exemple suivante, la fonction somme combine un parcours de liste avec un
accumulateur (la variable somme) pour calculer la somme de tous les éléments de la
liste passée en paramètre:
def somme(liste):
somme = 0
for i in liste:
somme += i
return sommesomme([1, 2, 3, 4, 5])15somme([0, -1, -2, -3, -4])-10somme([])0Indication
Utilisez un accumulateur, initialisé avec le premier élément de la liste, et mis à jour si nécessaire à chaque tour de boucle pour contenir la plus grande (respectivement petite) valeur rencontrée jusqu’à là.
def maximum(liste):
### BEGIN SOLUTION
m = liste[0]
for element in liste:
if element > m:
m = element
return m
### END SOLUTION# Tests
assert maximum([1, 2, 3, 4, 5]) == 5
assert maximum([-10, -5, -2, -3]) == -2
assert maximum([10]) == 10def minimum(liste):
### BEGIN SOLUTION
m = liste[0]
for element in liste:
if element < m:
m = element
return m
### END SOLUTION# Tests pour la fonction minimum
assert minimum([1, 2, 3, 4, 5]) == 1
assert minimum([-10, -5, -2, -3]) == -10
assert minimum([10]) == 10Parcours d’une liste par ses indices¶
Dans les parcours de liste ci-dessus, il n’y avait besoin que d’accéder aux valeurs de ces éléments. Dans d’autre cas, il peut être nécessaire d’accéder non seulement aux valeurs des éléments, mais aussi à leurs indices: où sont ils positionnés dans la liste.
Pour cela, une première approche est de parcourir les indices de la liste avec la
fonction range(), et d’accéder à la valeur de chacun de ses éléments par son indice.
Rappel : La fonction range()
La fonction range renvoie une séquence d’entiers. Elle est souvent utilisée dans les
boucles pour répéter une action un certain nombre de fois. Elle peut-être utilisée sous
trois formes :
range(fin): génère une séquence d’entiers de0àfinexclu.range(début, fin): génère une séquence d’entiers dedébutàfinexclu.range(début, fin, pas): génère une séquence d’entiers dedébutàfinexclu, par pas depas.
Considérons par exemple la liste suivante:
liste = [10, 6, 3, 9, 0]La boucle for suivante affiche tous les éléments de la liste avec leurs indices:
for i in range(len(liste)): # pour i allant de 0 à 5 exclus (la taille de la liste)
print(
"l'élément", liste[i], "est à l'indice", i
) # On affiche l'élément liste[i] et l'indice il'élément 10 est à l'indice 0
l'élément 6 est à l'indice 1
l'élément 3 est à l'indice 2
l'élément 9 est à l'indice 3
l'élément 0 est à l'indice 4
Le parcours d’une liste par ses indices permet notamment de modifier en place certains éléments de la liste. Dans l’exemple suivant, toutes les valeurs inférieures à 10 d’une liste de notes sont remplacées par 10:
notes = [12, 5, 14, 7, 18, 6, 19]
for i in range(len(notes)):
if notes[i] < 10:
notes[i] = 10
notes[12, 10, 14, 10, 18, 10, 19]Le parcours d’une liste par ses indices permet aussi de comparer des éléments
consécutifs. L’exemple suivant, part d’une liste de températures moyenne journalières, et
affiche les jours où la température a baissé. Notez que l’indice commence à 1 pour
pouvoir comparer les indices i et i-1.
temperatures = [20, 22, 21, 23, 25, 24, 26]
for i in range(1, len(temperatures)):
if temperatures[i] < temperatures[i - 1]:
print(
"La température a baissé de",
temperatures[i - 1],
"à",
temperatures[i],
"au jour",
i,
)La température a baissé de 22 à 21 au jour 2
La température a baissé de 25 à 24 au jour 5
def dernier_indice_maximum(liste):
### BEGIN SOLUTION
valeur_max = liste[0]
indice_max = 0
for i in range(len(liste)):
if liste[i] >= valeur_max:
valeur_max = liste[i]
indice_max = i
return indice_max
### END SOLUTIONassert dernier_indice_maximum([1, 2, 3, 4, 5]) == 4
assert dernier_indice_maximum([1, 5, 3, 5, 4]) == 3
assert dernier_indice_maximum([7, 7, 7, 7]) == 3
assert dernier_indice_maximum([10]) == 0Parcours d’une liste avec enumerate¶
La fonction enumerate fournit un idiome élégant pour parcourir simultanément les
indices et les valeurs d’une liste. Étant donné une liste (ou plus généralement un
conteneur ou un itérable), elle génère une séquence de paires (indice, valeur):
liste = ["a", "b", "c", "d"]list(enumerate(liste))[(0, 'a'), (1, 'b'), (2, 'c'), (3, 'd')]On peut alors parcourir les indices et valeurs d’une liste comme suit:
for indice, valeur in enumerate(liste):
print("la valeur", valeur, "est à l'indice", indice)la valeur a est à l'indice 0
la valeur b est à l'indice 1
la valeur c est à l'indice 2
la valeur d est à l'indice 3