Parcours de tableaux
D'après un cours de Nicolas Revéret
Un premier exemple
Considérons le tableau des dix langues les plus parlées dans le monde (en nombre de locuteurs dont c'est la langue maternelle - source : Wikipédia) :
plus_parlees = [
"mandarin",
"espagnol",
"anglais",
"hindi",
"bengali",
"portugais",
"russe",
"japonais",
"allemand",
"cantonais",
]
Le mandarin est le premier élément du tableau : c'est la langue maternelle la plus importante. La valeur "mandarin"
est à l'indice 0
dans le tableau.
Il est très courant de parcourir des tableaux en utilisant une boucle « Pour », avec for
de Python.
Une première approche consiste à parcourir les indices
print("Les dix langues maternelles les plus importantes sont :\n")
for indice in range(len(plus_parlees)):
print("-", plus_parlees[indice])
On obtient alors :
Parcourir par valeurs
Il est toutefois possible de parcourir directement les valeurs contenues dans le tableau. Ainsi, le code ci-dessous affichera les mêmes lignes :
print("Les dix langues maternelles les plus importantes sont :\n")
for langue in plus_parlees:
print("-", langue)
Comme on peut le voir, le code est allégé, plus facile à lire, car on n'utilise pas les indices.
Les indices utiles ?
Dans certains cas, il est toutefois nécessaire d'utiliser les indices et les valeurs :
print("Les dix langues maternelles les plus importantes sont :\n")
for indice in range(len(plus_parlees)):
print("-", plus_parlees[indices], "en n°", indice + 1)
On obtient alors :
À vous de jouer 1
On considère le tableau pointures = [38, 43, 44, 43, 37, 42, 39, 43, 40]
. On exécute le code ci-dessous :
- Ce code affiche tous les indices du tableau
- Ce code affiche toutes les pointures du tableau
- Ce code affiche les trois premières pointures du tableau
- Ce code provoque une erreur
- Ce code affiche tous les indices du tableau
- Ce code affiche toutes les pointures du tableau
- Ce code affiche les trois premières pointures du tableau
- Ce code provoque une erreur
En effet, la boucle parcourt les entiers entre 0
inclus et 44
exclu. On essaie ensuite dans la ligne 2 d'accéder à l'élément d'indice i
du tableau. Cela fonctionne pour les premières valeurs de i
, jusqu'à i = 8
. Ensuite, l'instruction pointures[i]
entraîne une erreur car i
vaut 9
et pointures[9]
n'existe pas.
Remarques
Avec un tableau
de longueur l
, alors
tableau[l]
n'existe pas,tableau[l - 1]
est le dernier élément, (sil > 0
).
À vous de jouer 2
On considère toujours le tableau pointures = [38, 43, 44, 43, 37, 42, 39, 43, 40]
. On exécute le code ci-dessous :
- Ce code affiche tous les indices du tableau
- Ce code affiche toutes les pointures du tableau
- Ce code provoque une erreur
- La variable
i
est mal nommée
- Ce code affiche tous les indices du tableau
- Ce code affiche toutes les pointures du tableau
- Ce code provoque une erreur
- La variable
i
est mal nommée
Cette fois-ci on parcourt les valeurs du tableau. La première valeur de i
est donc 38
, la dernière 40
. On affiche ensuite chaque valeur de i
: des pointures.
De plus, le nom de variable i
est souvent utilisé pour désigner des indices dans une boucle. Comme nous l'avons vu, la variable i
se voit ici affectée les valeurs du tableau. Mieux vaudrait ne pas utiliser ce nom de variable.
Attention
Le nom de variable i
est souvent utilisé pour désigner des indices. Il ne faut pas l'utiliser pour faire un parcours par valeurs d'un tableau, car cela crée de la confusion à la lecture du code. Pour un parcours par valeur, il vaut mieux choisir un nom de variable explicite.
Par exemple, comme vu au début de ce cours, la variable langue
permet de parcourir le tableau plus_parlees
grâce à :
for langue in plus_parlees:
À vous de jouer 3 : Parours par indice ou par valeur ?
On dispose d'un tableau contenant des nombres entiers dont certains sont peut-être en double. Dans quels cas de figures peut-on utiliser un parcours par valeurs du tableau (sans utiliser les indices) ?
- Rechercher le plus grand nombre
- Déterminer si le nombre 0 est présent dans le tableau ?
- Déterminer la position du minimum
- Calculer la somme de tous les nombres
- Rechercher le plus grand nombre
- Déterminer si le nombre 0 est présent dans le tableau ?
- Déterminer la position du minimum
- Calculer la somme de tous les nombres
Seul le troisième cas nécessite de connaître l'indice du minimum. Dans les autres cas, on peut se contenter de parcourir par valeurs.
À vous de jouer 4
Compléter le script ci-dessous permettant de compter le nombre de pointures égales à 41 dans le tableau.
L'avant-dernière ligne assert compteur == 2
permet de vérifier que votre code trouve bien 2
.
- Si ce n'est pas le cas Python affichera une erreur.
- Si, à l'inverse, le test est passé avec succès Python affichera
Bravo !
.
À vous de jouer 5 : la fonction derniere_occurrence
Compléter la fonction derniere_occurrence
prenant en argument tableau
de type list
ainsi qu'une valeur cible
et qui renvoie l'indice de la dernière occurrence de cible
dans tableau
.
Si cible
n'est pas dans tableau
, la fonction renverra None
.
# Tests
(insensible à la casse)(Ctrl+I)
(Shift+Esc ; Ctrl pour inverser les colonnes)
(Esc)
Solution
Sachant que l'on cherche la position d'un élément, il faut parcourir avec les indices :
def derniere_occurrence(tableau, cible):
resultat = None
for i in range(len(tableau)):
if tableau[i] == cible:
resultat = i
return resultat
Une solution alternative et plus astucieuse consiste à parcourir le tableau en partant de la fin. Ainsi, dès que l'on rencontre la cible
on peut renvoyer l'indice correspondant :
# Tests
(insensible à la casse)(Ctrl+I)
(Shift+Esc ; Ctrl pour inverser les colonnes)
(Esc)