Algorithmique et programmation — Notion de liste
- 1
Exercice 1
FacileOn considère les instructions Python suivantes :
L = [3, 8, 5, 1, 9, 4]- Que renvoie
L[0]? Que renvoieL[2]? - Que renvoie
len(L)? - Quel indice permet d'accéder au dernier élément de la liste ? Donner deux façons de l'écrire.
- Que renvoie
L[1:4]? - Écrire une instruction qui remplace le troisième élément de la liste par la valeur .
Voir un indice
Les indices d'une liste commencent à . Le dernier élément d'une liste de longueur a pour indice , ou encore l'indice . La tranche
L[a:b]contient les éléments d'indices à .Voir la correction
L[0]renvoie (premier élément, indice ).L[2]renvoie (troisième élément, indice ).len(L)renvoie : la liste contient six éléments.- Le dernier élément a pour indice , c'est-à-dire
len(L) - 1. On peut aussi l'écrireL[-1], qui renvoie . L[1:4]renvoie la sous-liste des éléments d'indices , et , soit[8, 5, 1]. L'élément d'indice n'est pas inclus.- Le troisième élément a pour indice . On écrit :
L[2] = 7Après cette instruction,
Lvaut[3, 8, 7, 1, 9, 4]. - Que renvoie
- 2
Exercice 2
FacileConstruire une liste peut se faire de plusieurs manières. Pour chacune des questions suivantes, donner la liste finale obtenue.
- En extension. On écrit
A = [1, 4, 9, 16, 25]. Que contientA? - Par ajouts successifs. On exécute :
B = [] for k in range(1, 6): B.append(k * k)Que contient
Bà la fin ?- En compréhension. On écrit
C = [k * k for k in range(1, 6)]. Que contientC? - Comparer les trois listes obtenues.
Voir un indice
range(1, 6)parcourt les entiers (la borne est exclue). La méthodeappendajoute un élément à la fin d'une liste. Une liste en compréhension[expression for k in ...]calcule l'expression pour chaque valeur de .Voir la correction
Acontient les cinq valeurs écrites directement :[1, 4, 9, 16, 25].- On part de la liste vide
B = []. La boucle parcourt et ajoute à chaque fois :
-
- : on ajoute , donc
B = [1]; 1. : on ajoute , doncB = [1, 4]; 1. : on ajoute , doncB = [1, 4, 9]; 1. : on ajoute , doncB = [1, 4, 9, 16]; 1. : on ajoute , doncB = [1, 4, 9, 16, 25].
- : on ajoute , donc
- La compréhension calcule pour de à , donc
C = [1, 4, 9, 16, 25]. - Les trois listes sont identiques :
A,BetCvalent toutes[1, 4, 9, 16, 25]. Ce sont trois façons différentes de construire la liste des carrés des entiers de à .
- En extension. On écrit
- 3
Exercice 3
FacileOn donne la liste
notes = [12, 8, 15, 6, 18, 11].- Écrire une boucle
forqui parcourt la liste et affiche chaque note. - Écrire une fonction
somme(L)qui renvoie la somme des éléments d'une listeLde nombres, en initialisant un accumulateur à et en le mettant à jour dans une boucle. - En déduire une fonction
moyenne(L)qui renvoie la moyenne des éléments deL. - Que renvoie
moyenne(notes)?
Voir un indice
Pour parcourir les éléments d'une liste, on peut écrire
for x in L:. Pour la somme, on utilise une variable accumulateursinitialisée à , à laquelle on ajoute chaque élément. La moyenne est la somme divisée par le nombre d'élémentslen(L).Voir la correction
- On itère directement sur les éléments :
for note in notes: print(note)Cela affiche successivement , , , , , . 1.
def somme(L): s = 0 for x in L: s = s + x return sdef moyenne(L): return somme(L) / len(L)- La somme des notes est , et il y a notes. Donc
moyenne(notes)renvoie .
- Écrire une boucle
- 4
Exercice 4
FacileOn veut construire, à partir d'une liste, une nouvelle liste ne contenant que certains éléments.
- Écrire, en compréhension, la liste
pairsdes entiers pairs de à inclus. - Écrire, en compréhension, à partir de
L = [7, 2, 9, 4, 5, 12, 3], la liste des éléments deLstrictement supérieurs à . - Écrire une fonction
compte_positifs(L)qui renvoie le nombre d'éléments strictement positifs d'une listeL. - Tester la fonction avec
L = [-3, 4, 0, 7, -1, 2].
Voir un indice
Une compréhension avec condition s'écrit
[x for x in L if condition]. Pour les entiers pairs, on peut utiliserrange(0, 21, 2)ou une conditionk % 2 == 0. Pour compter, on incrémente un compteur dans une boucle.Voir la correction
- Deux écritures possibles :
pairs = [k for k in range(0, 21) if k % 2 == 0]ou plus directement
pairs = [k for k in range(0, 21, 2)]. Dans les deux cas :[0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20]grands = [x for x in L if x > 5]On garde les éléments strictement supérieurs à :
grandsvaut[7, 9, 12]. 1.def compte_positifs(L): c = 0 for x in L: if x > 0: c = c + 1 return c- Avec
L = [-3, 4, 0, 7, -1, 2], les éléments strictement positifs sont , et . Donccompte_positifs(L)renvoie . Attention : n'est pas strictement positif et n'est pas compté.
- Écrire, en compréhension, la liste
- 5
Maximum d'une liste en Python
MoyenOn souhaite déterminer le maximum d'une liste de nombres sans utiliser la fonction
maxde Python.- Écrire une fonction
maximum(L)qui renvoie le plus grand élément d'une listeLnon vide. On initialisera une variable avec le premier élémentL[0], puis on parcourra la liste. - Dérouler l'exécution (trace) de
maximum([4, 9, 2, 11, 7])en indiquant la valeur de la variable qui stocke le maximum à chaque étape. - Modifier la fonction pour qu'elle renvoie l'indice d'un plus grand élément plutôt que sa valeur.
Voir un indice
On stocke le maximum courant dans une variable
minitialisée àL[0]. On compare chaque élément àmet on metmà jour s'il est plus grand. Pour l'indice, on parcourt les indices avecrange(len(L))et on mémorise l'indice du maximum.Voir la correction
- Écrire une fonction
- 6
Traitement d'une liste de consommations
MoyenUne entreprise relève chaque jour de la semaine (du lundi au vendredi) sa consommation d'électricité, en kWh, dans une liste :
conso = [120, 135, 128, 142, 118]- Écrire une instruction qui ajoute à la liste la consommation du samedi, égale à kWh.
- Écrire une fonction
total(L)renvoyant la consommation totale de la semaine. - Écrire une fonction
jours_au_dessus(L, seuil)qui renvoie la liste des indices des jours où la consommation dépasse strictementseuil. - Que renvoie
jours_au_dessus(conso, 125)après l'ajout du samedi ? - On s'est trompé : la valeur du mercredi (indice ) doit être et non . Écrire l'instruction qui corrige cette valeur.
Voir un indice
appendajoute un élément en fin de liste. Pour renvoyer des indices, on parcourtrange(len(L))et on ajouteià une liste résultat quand la condition est vérifiée. On accède à un élément par son indice pour le modifier.Voir la correction
- 7
Suppression de valeurs dans une liste
MoyenOn dispose d'une liste de nombres et on veut supprimer certains de ses éléments.
- On exécute :
L = [5, 8, 3, 8, 6, 8, 2] L.remove(8)Que contient
Laprès cette instruction ? La méthoderemovesupprime-t-elle toutes les occurrences de ?- On veut construire une nouvelle liste sans les valeurs égales à . Écrire, en compréhension, la liste
Mdes éléments deL = [5, 8, 3, 8, 6, 8, 2]différents de . - Écrire une fonction
sans_valeur(L, v)qui renvoie une nouvelle liste contenant les éléments deLdifférents dev, sans modifierL. - Piège. On propose le code suivant pour supprimer tous les :
L = [5, 8, 3, 8, 6, 8, 2] for i in range(len(L)): if L[i] == 8: L.remove(8)Expliquer pourquoi ce code provoque une erreur ou un résultat incorrect.
Voir un indice
remove(v)ne supprime que la première occurrence dev. Modifier une liste (en supprimant des éléments) pendant qu'on la parcourt par indices change sa longueur et décale les éléments : les indices ne correspondent plus. La compréhension[x for x in L if x != v]construit une liste sans toucher à l'originale.Voir la correction
- 8
Exercice 8
DifficileOn appelle crible d'Ératosthène un algorithme qui détermine tous les nombres premiers inférieurs ou égaux à un entier . Le principe : on part de la liste de tous les entiers de à , puis on élimine progressivement les multiples de chaque nombre premier trouvé.
- Écrire une fonction
est_premier(n)qui teste si un entiernest premier, en cherchant un diviseur entre et . - En déduire, en compréhension, la liste des nombres premiers inférieurs ou égaux à .
- Proposer une implémentation du crible utilisant une liste de booléens
est_premde taille , oùest_prem[k]indique si est premier. Renvoyer la liste des indicesktels queest_prem[k]estTrue. - Vérifier que les deux méthodes donnent la même liste pour .
Voir un indice
Voir la correction
- Écrire une fonction
- 9
Exercice 9
DifficileOn s'intéresse à la manipulation avancée des indices et à la construction de listes de listes.
- Écrire une fonction
inverse(L)qui renvoie une nouvelle liste contenant les éléments deLdans l'ordre inverse, sans utiliserL[::-1]nireversed. On parcourra les indices de la fin vers le début. - Une liste peut contenir des listes. On considère la « matrice »
M = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]Que renvoie
M[1]? Que renvoieM[1][2]?- Écrire, à l'aide d'une double boucle, une fonction
somme_matrice(M)qui renvoie la somme de tous les nombres d'une telle liste de listes. - Écrire, en compréhension imbriquée, la liste
diagonaledes élémentsM[i][i]pouriallant de à . Que vaut-elle ? - Ouverture. Écrire, en compréhension imbriquée, la table de multiplication , c'est-à-dire la liste de listes dont l'élément de la ligne
iet de la colonnejvaut(i+1)*(j+1).
Voir un indice
Voir la correction
- Écrire une fonction
