Parcours de listes#
La boucle \(for\) permet de parcourir chacun des éléments d’une liste.
liste = [1, 2, 3, 4, 5]
for element in liste:
print(element)
1
2
3
4
5
Cette méthode permet d’accéder aux éléments d’une liste, mais on peut aussi avoir besoin de leurs indices, et pour cela on utilise la fonction \(range()\).
À faire
Introduire cela plus loin, juste avant le(s) exercice(s) pour les manipuller.
Utiliser une liste non numérique pour l’exemple. Donner un exemple pour lequel cela ait un intérêt d’avoir simultanément l’indice et la valeur.
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
àfin
exclu.range(début, fin)
: génère une séquence d’entiers dedébut
àfin
exclu.range(début, fin, pas)
: génère une séquence d’entiers dedébut
àfin
exclu, par pas depas
.
liste = [10, 6, 3, 9, 0]
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 i
l'é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
Dans l’exemple suivant où l’on souhaite remplacer certains éléments de la liste, on a besoin des indices :
notes = [12, 5, 14, 7, 18, 6, 19]
# Parcours avec les indices pour modifier la liste en place
for i in range(len(notes)):
if notes[i] < 10:
notes[i] = 10 # Remplacer les notes en dessous de 10 par 10
print(notes) # Résultat attendu : [12, 10, 14, 10, 18, 10, 19]
[12, 10, 14, 10, 18, 10, 19]
On peut également vouloir comparer des éléments consécutifs :
temperatures = [20, 22, 21, 23, 25, 24, 26]
# Comparer des éléments consécutifs pour trouver les baisses de température
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
Voici un autre exemple de parcours d’une liste : une fonction qui prend une liste en entrée et renvoie la somme de tous ses éléments.
def somme(liste):
somme = 0
for i in liste:
somme += i
return somme
print(somme([1, 2, 3, 4, 5]))
print(somme([0, -1, -2, -3, -4]))
print(somme([]))
15
-10
0
Exercice
Définissez les fonctions maximum
et minimum
qui renvoient respectivement le maximum et le minimum d’une liste d’entiers.
def maximum(liste):
### BEGIN SOLUTION
m = liste[0]
for element in liste:
if element >= m:
m = element
return m
### END SOLUTION
# Tests pour la fonction maximum
assert maximum([1, 2, 3, 4, 5]) == 5
assert maximum([-10, -5, -2, -3]) == -2
assert maximum([10]) == 10
def 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]) == 10
Exercice
Définissez la fonction dernierIndiceMaximum
qui renvoie l’indice du maximum d’une liste. Si le maximum apparaît plusieurs fois dans la liste, on veut l’indice de sa dernière occurrence.
def dernierIndiceMaximum(liste):
### BEGIN SOLUTION
m = liste[0]
longueur=len(liste)
indice_max = 0
for i in range(longueur):
if liste[i] >= m:
m = liste[i]
indice_max = i
return indice_max
### END SOLUTION
assert dernierIndiceMaximum([1, 2, 3, 4, 5]) == 4
assert dernierIndiceMaximum([1, 5, 3, 5, 4]) == 3
assert dernierIndiceMaximum([7, 7, 7, 7]) == 3
assert dernierIndiceMaximum([10]) == 0