Indices, parcours et filtrage sont testés sur des listes de formes différentes. Une recherche dichotomique, une génération de termes et une compréhension de liste obligent à justifier les bornes, l'ordre et les éventuelles répétitions.
Les définitions et méthodes utilisées sont réunies dans le cours de Algorithmique, listes et Python. La génération de listes s'applique directement aux les suites numériques.
Bases de Algorithmique, listes et Python : Parcourir une liste
Exercice 1 : Parcourir une liste
Le code for i in range(len(L) + 1): s += L[i] doit additionner une liste L.
- Repérer l'erreur.
- Corriger la boucle.
- Donner une seconde écriture plus directe.
Indication
Voir le corrigé
range(len(L)+1)produit l'indicelen(L), situé hors de la liste. Le programme déclenche donc une erreur.- La boucle corrigée est
for i in range(len(L)): s += L[i]. - Sans avoir besoin des indices, on écrit plus directement
for valeur in L: s += valeur.
Exercice 2 : Écarts entre termes consécutifs
On donne L = [3, 8, -2, 5, 5, 11]. On veut construire la liste des différences entre deux termes consécutifs.
- Déterminer les indices de départ valides.
- Écrire une fonction Python qui renvoie la liste des différences.
- Donner la liste obtenue avec L.
- Compter les hausses, les baisses et les paliers.
Indication
len(L)-2 et len(L)-1.Voir le corrigé
- Pour former , il faut . En Python, cela correspond à
range(len(L)-1). - Une écriture concise est
def ecarts(L): return [L[i+1] - L[i] for i in range(len(L)-1)]. - Avec
L = [3, 8, -2, 5, 5, 11], la fonction renvoie[5, -10, 7, 0, 6]. - Les différences contiennent trois valeurs positives, une valeur négative et un zéro : il y a trois hausses, une baisse et un palier.
Choisir une méthode : Générer les premiers termes d'une suite et chercher un maximum
Exercice 3 : Générer les premiers termes d’une suite et chercher un maximum
Pour , on veut la liste des termes de à , puis le plus grand terme.
- Écrire la compréhension de liste demandée.
- Justifier les bornes et le nombre de valeurs obtenues.
- Déterminer la valeur maximale de la liste.
- Expliquer comment retrouver son rang sans ignorer une éventuelle égalité.
Indication
Voir le corrigé
- La compréhension est
[3*n**2 - 2*n + 1 for n in range(11)]. range(11)produit les indices 0 à 10 inclusivement. La liste contient 11 valeurs, ce qui contrôle la borne.- La fonction max appliquée à la liste donne la valeur maximale.
- Pour connaître son rang, on cherche ensuite l'indice correspondant avec prudence en cas d'égalité.
Exercice 4 : Dichotomie dans une liste triée
On cherche une valeur x dans une liste triée sans parcourir tous les éléments.
- Décrire les indices gauche, droite et milieu.
- Écrire la condition de boucle.
- Expliquer la mise à jour selon la comparaison.
- Donner la complexité qualitative par rapport au parcours complet.
Indication
Voir le corrigé
- On initialise
gauche = 0,droite = len(L) - 1, puismilieu = (gauche + droite) // 2à chaque tour. - La boucle continue tant que
gauche <= droiteet que la valeur n'a pas été trouvée. - Si
L[milieu] < x, on posegauche = milieu + 1. SiL[milieu] > x, on posedroite = milieu - 1. - Chaque étape élimine environ la moitié des candidats : le nombre d'étapes croît logarithmiquement, alors qu'un parcours complet est linéaire.
Approfondir Algorithmique, listes et Python : Relier compréhension de liste et ensemble défini par une propriété
Exercice 5 : Filtrer puis moyenner une liste
On donne L = [12, 7, 15, 9, 18, 4]. On veut la moyenne des valeurs supérieures ou égales à 10.
- Construire la liste filtrée.
- Calculer sa moyenne.
- Prévoir le cas où aucune valeur ne satisfait la condition.
Indication
Voir le corrigé
F = [x for x in L if x >= 10]donne[12, 15, 18].- La moyenne vaut .
- Avant de diviser, il faut tester
if len(F) == 0afin d'éviter une division par zéro et de choisir un résultat explicite.
Exercice 6 : Relier compréhension de liste et ensemble défini par une propriété
On exécute [n*n for n in range(-2, 3)] et l'on compare le résultat à l'ensemble des carrés d'entiers compris entre et 2.
- Donner la liste produite par la compréhension.
- Donner l'ensemble des valeurs obtenues.
- Expliquer la différence entre les deux objets.
Indication
Voir le corrigé
- La compréhension produit la liste
[4, 1, 0, 1, 4]. - L'ensemble des valeurs est .
- La liste garde l'ordre des indices et contient deux fois 4 et deux fois 1. L'ensemble ne conserve ni cet ordre ni les doublons.