Parcourir une liste entière avec une boucle for¶
Vous voudrez souvent parcourir toutes les entrées d’une liste, en effectuant la même tâche avec chaque élément. Par exemple, dans un jeu, vous pourriez vouloir déplacer chaque élément à l’écran de la même quantité, ou dans une liste de nombres, vous pourriez vouloir effectuer la même opération statistique sur chaque élément. Ou peut-être voudrez-vous afficher chaque titre d’une liste d’articles sur un site web. Lorsque vous voulez faire la même action avec chaque élément d’une liste, vous pouvez utiliser la boucle for de Python.
Disons que nous avons une liste de noms de professions et que nous voulons afficher chaque nom de la liste. Nous pourrions le faire en récupérant chaque nom de la liste individuellement, mais cette approche pourrait causer plusieurs problèmes. D’une part, ce serait répétitif de le faire avec une longue liste de noms. D’autre part, nous devrions changer notre code chaque fois que la longueur de la liste change. Une boucle for évite ces deux problèmes en laissant Python gérer ces aspects en interne.
Utilisons une boucle for pour afficher chaque profession dans une liste :
professions = ['médecin', 'enseignant', 'commerçant'] #
for profession in professions: #
print(profession) #médecin
enseignant
commerçant
Nous commençons par définir une liste, comme nous l’avons fait au chapitre 3. Ensuite, nous définissons une boucle for. Cette ligne demande à Python de prendre un nom dans la liste professions et de l’associer à la variable profession. Puis, nous demandons à Python d’afficher le nom qui vient d’être assigné à profession. Python répète ensuite ces deux dernières lignes, une fois pour chaque nom dans la liste. Il pourrait être utile de lire ce code comme : « Pour chaque profession dans la liste des professions, affiche le nom de la profession. » La sortie est une simple impression de chaque nom dans la liste :
médecin
enseignant
commerçantUn regard plus attentif sur les boucles¶
Le concept de boucle est important car c’est l’une des manières les plus courantes pour un ordinateur d’automatiser des tâches répétitives. Par exemple, dans une boucle simple comme celle utilisée dans professions.py, Python lit initialement la première ligne de la boucle :
for profession in professions:Cette ligne demande à Python de récupérer la première valeur de la liste professions et de l’associer à la variable profession. Cette première valeur est 'médecin'. Python lit ensuite la ligne suivante :
print(profession)Python affiche la valeur actuelle de profession, qui est toujours 'médecin'. Comme la liste contient d’autres valeurs, Python retourne à la première ligne de la boucle :
for profession in professions:Python récupère le nom suivant dans la liste, 'enseignant', et associe cette valeur à la variable profession. Python exécute ensuite la ligne :
print(profession)Python affiche à nouveau la valeur actuelle de profession, qui est maintenant 'enseignant'. Python répète la boucle entière une fois de plus avec la dernière valeur de la liste, 'commerçant'. Comme il n’y a plus de valeurs dans la liste, Python passe à la ligne suivante du programme. Dans ce cas, rien ne vient après la boucle for, donc le programme se termine simplement.
Lorsque vous utilisez des boucles pour la première fois, gardez à l’esprit que l’ensemble des étapes est répété une fois pour chaque élément de la liste, quel que soit le nombre d’éléments dans la liste. Si vous avez un million d’éléments dans votre liste, Python répète ces étapes un million de fois — et généralement très rapidement.
Gardez également à l’esprit lorsque vous écrivez vos propres boucles for que vous pouvez choisir n’importe quel nom pour la variable temporaire qui sera associée à chaque valeur de la liste. Cependant, il est utile de choisir un nom significatif qui représente un seul élément de la liste. Par exemple, voici une bonne façon de commencer une boucle for pour une liste de chats, une liste de chiens et une liste générale d’éléments :
for chat in chats:
for chien in chiens:
for element in liste_elements:Ces conventions de nommage peuvent vous aider à suivre l’action effectuée sur chaque élément dans une boucle for. Utiliser des noms au singulier et au pluriel peut vous aider à identifier si une section de code travaille avec un seul élément de la liste ou la liste entière
Effectuer plus de travail dans une boucle for¶
Vous pouvez faire à peu près n’importe quoi avec chaque élément dans une boucle for. Reprenons l’exemple précédent en affichant un message à chaque professionnel, en le saluant :
professions = ['médecin', 'enseignant', 'commerçant']
for profession in professions:
print(f"Bonjour, cher {profession.title()} !")La seule différence dans ce code est que nous composons un message pour chaque profession, en commençant par le nom de cette profession. La première fois dans la boucle, la valeur de profession est 'médecin', donc Python commence le premier message avec ‘Médecin’. La deuxième fois, le message commencera par ‘Enseignant’, et la troisième fois par ‘Commerçant’. La sortie montre un message personnalisé pour chaque profession dans la liste :
Bonjour, cher Médecin !
Bonjour, cher Enseignant !
Bonjour, cher Commerçant !Vous pouvez également écrire autant de lignes de code que vous le souhaitez dans la boucle for. Chaque ligne indentée suivant la ligne for profession in professions: est considérée comme faisant partie de la boucle, et chaque ligne indentée est exécutée une fois pour chaque valeur dans la liste[cite: 2357]. Par conséquent, vous pouvez effectuer autant de travail que vous le souhaitez avec chaque valeur de la liste.
Ajoutons une deuxième ligne à notre message, en disant à chaque professionnel que nous apprécions son travail :
professions = ['médecin', 'enseignant', 'commerçant']
for profession in professions:
print(f"Bonjour, cher {profession.title()} !")
print(f"Nous apprécions beaucoup votre travail de {profession}.\n") #Bonjour, cher Médecin !
Nous apprécions beaucoup votre travail de médecin.
Bonjour, cher Enseignant !
Nous apprécions beaucoup votre travail de enseignant.
Bonjour, cher Commerçant !
Nous apprécions beaucoup votre travail de commerçant.
Comme nous avons indenté les deux appels à print(), chaque ligne sera exécutée une fois pour chaque profession dans la liste. Le \n dans le second appel print() insère une ligne vide après chaque passage dans la boucle. Cela crée un ensemble de messages soigneusement groupés pour chaque personne dans la liste :
Bonjour, cher Médecin !
Nous apprécions beaucoup votre travail de médecin.
Bonjour, cher Enseignant !
Nous apprécions beaucoup votre travail de enseignant.
Bonjour, cher Commerçant !
Nous apprécions beaucoup votre travail de commerçant.Vous pouvez utiliser autant de lignes que vous le souhaitez dans vos boucles for. En pratique, vous trouverez souvent utile d’effectuer un certain nombre d’opérations différentes avec chaque élément d’une liste lorsque vous utilisez une boucle for.
Faire quelque chose après une boucle for¶
Que se passe-t-il une fois qu’une boucle for a terminé son exécution ? Généralement, vous voudrez résumer un bloc de sortie ou passer à d’autres tâches que votre programme doit accomplir.
Toutes les lignes de code après la boucle for qui ne sont pas indentées sont exécutées une fois sans répétition. Écrivons un remerciement au groupe de professionnels dans son ensemble, en les remerciant pour leur contribution essentielle. Pour afficher ce message de groupe après que tous les messages individuels ont été imprimés, nous plaçons le message de remerciement après la boucle for sans indentation :
professions = ['médecin', 'enseignant', 'commerçant']
for profession in professions:
print(f"Bonjour, cher {profession.title()} !")
print(f"Nous apprécions beaucoup votre travail de {profession}.\n")
print("Merci à tous pour votre contribution essentielle à notre communauté !") #Bonjour, cher Médecin !
Nous apprécions beaucoup votre travail de médecin.
Bonjour, cher Enseignant !
Nous apprécions beaucoup votre travail de enseignant.
Bonjour, cher Commerçant !
Nous apprécions beaucoup votre travail de commerçant.
Merci à tous pour votre contribution essentielle à notre communauté !
Les deux premiers appels à print() sont répétés une fois pour chaque profession dans la liste, comme vous l’avez vu précédemment. Cependant, comme la dernière ligne n’est pas indentée, elle n’est affichée qu’une seule fois :
Bonjour, cher Médecin !
Nous apprécions beaucoup votre travail de médecin.
Bonjour, cher Enseignant !
Nous apprécions beaucoup votre travail de enseignant.
Bonjour, cher Commerçant !
Nous apprécions beaucoup votre travail de commerçant.
Merci à tous pour votre contribution essentielle à notre communauté !Lorsque vous traitez des données à l’aide d’une boucle for, vous constaterez que c’est un bon moyen de résumer une opération effectuée sur un ensemble de données entier.
Éviter les erreurs d’indentation¶
Python utilise l’indentation pour déterminer comment une ligne, ou un groupe de lignes, est lié au reste du programme. Dans les exemples précédents, les lignes qui imprimaient des messages aux professionnels individuels faisaient partie de la boucle for parce qu’elles étaient indentées.
L’utilisation de l’indentation par Python rend le code très facile à lire. Fondamentalement, il utilise les espaces blancs pour vous forcer à écrire du code soigneusement formaté avec une structure visuelle claire. Dans les programmes Python plus longs, vous remarquerez des blocs de code indentés à quelques niveaux différents. Ces niveaux d’indentation vous aident à avoir une idée générale de l’organisation globale du programme.
Lorsque vous commencez à écrire du code qui repose sur une indentation correcte, vous devrez faire attention à quelques erreurs d’indentation courantes. Par exemple, les gens indentent parfois des lignes de code qui n’ont pas besoin d’être indentées ou oublient d’indenter des lignes qui doivent l’être. Voir des exemples de ces erreurs maintenant vous aidera à les éviter à l’avenir et à les corriger lorsqu’elles apparaîtront dans vos propres programmes. Examinons certaines des erreurs d’indentation les plus courantes.
Oublier d’indenter
Indentez toujours la ligne après l’instruction for dans une boucle. Si vous oubliez, Python vous le rappellera:
professions = ['médecin', 'enseignant', 'commerçant']
for profession in professions:
print(profession) # Erreur ici !L’appel à print() devrait être indenté, mais il ne l’est pas. Lorsque Python s’attend à un bloc indenté et n’en trouve pas, il vous indique à quelle ligne il a rencontré un problème.
File "professions.py", line 3
print(profession)
^
IndentationError: expected an indented blockVous pouvez généralement résoudre ce type d’erreur d’indentation en indentant la ou les lignes immédiatement après l’instruction for.
Oublier d’indenter des lignes supplémentaires
Parfois, votre boucle s’exécutera sans aucune erreur mais ne produira pas le résultat attendu. Cela peut arriver lorsque vous essayez d’effectuer plusieurs tâches dans une boucle et que vous oubliez d’indenter certaines de ses lignes[cite: 2394].
Par exemple, voici ce qui se passe lorsque nous oublions d’indenter la deuxième ligne de la boucle qui dit que nous apprécions le travail de chaque professionnel :
professions = ['médecin', 'enseignant', 'commerçant']
for profession in professions:
print(f"Bonjour, cher {profession.title()} !")
print(f"Nous apprécions beaucoup votre travail de {profession}.\n") # Erreur ici !L’appel à print() est censé être indenté, mais comme Python trouve au moins une ligne indentée après l’instruction for, il ne signale pas d’erreur. Par conséquent, le premier appel print() est exécuté une fois pour chaque nom dans la liste car il est indenté. Le deuxième appel print() n’est pas indenté, il n’est donc exécuté qu’une seule fois après la fin de la boucle. Comme la valeur finale associée à profession est 'commerçant', c’est le seul qui reçoit le message “Nous apprécions beaucoup...” :
Bonjour, cher Médecin !
Bonjour, cher Enseignant !
Bonjour, cher Commerçant !
Nous apprécions beaucoup votre travail de commerçant.C’est une erreur logique. La syntaxe est du code Python valide, mais le code ne produit pas le résultat souhaité car un problème survient dans sa logique[cite: 2401]. Si vous vous attendez à voir une certaine action répétée une fois pour chaque élément d’une liste et qu’elle n’est exécutée qu’une seule fois, déterminez si vous devez simplement indenter une ligne ou un groupe de lignes.
Indenter inutilement
Si vous indentez accidentellement une ligne qui n’a pas besoin d’être indentée, Python vous informe de l’indentation inattendue :
# salut_monde.py
message = "Salut le monde Python !"
print(message) # Erreur ici !Nous n’avons pas besoin d’indenter l’appel print(), car il ne fait pas partie d’une boucle ; par conséquent, Python signale cette erreur :
File "salut_monde.py", line 2
print(message)
^
IndentationError: unexpected indentVous pouvez éviter les erreurs d’indentation inattendues en n’indentant que lorsque vous avez une raison spécifique de le faire. Dans les programmes que vous écrivez à ce stade, les seules lignes que vous devriez indenter sont les actions que vous voulez répéter pour chaque élément dans une boucle for[cite: 2406].
Indenter inutilement après la boucle
Si vous indentez accidentellement du code qui devrait s’exécuter après la fin d’une boucle, ce code sera répété une fois pour chaque élément de la liste. Parfois, cela incite Python à signaler une erreur, mais souvent cela entraînera une erreur logique[cite: 2408].
Par exemple, voyons ce qui se passe lorsque nous indentons accidentellement la ligne qui remerciait les professionnels en groupe :
# professions.py
professions = ['médecin', 'enseignant', 'commerçant']
for profession in professions:
print(f"Bonjour, cher {profession.title()} !")
print(f"Nous apprécions beaucoup votre travail de {profession}.\n")
print("Merci à tous pour votre contribution essentielle à notre communauté !") # Erreur ici !Parce que la ligne est indentée, elle est affichée une fois pour chaque personne dans la liste, comme montré ici :
Bonjour, cher Médecin !
Nous apprécions beaucoup votre travail de médecin.
Merci à tous pour votre contribution essentielle à notre communauté !
Bonjour, cher Enseignant !
Nous apprécions beaucoup votre travail de enseignant.
Merci à tous pour votre contribution essentielle à notre communauté !
Bonjour, cher Commerçant !
Nous apprécions beaucoup votre travail de commerçant.
Merci à tous pour votre contribution essentielle à notre communauté !
C’est une autre erreur logique, similaire à celle de la section “Oublier d’indenter des lignes supplémentaires”. Comme Python ne sait pas ce que vous essayez d’accomplir avec votre code, il exécutera tout code écrit avec une syntaxe valide. Si une action est répétée plusieurs fois alors qu’elle ne devrait être exécutée qu’une seule fois, vous devez probablement désindenter le code de cette action[cite: 2415].
Oublier les deux-points
Les deux-points (:) à la fin d’une instruction for indiquent à Python d’interpréter la ligne suivante comme le début d’une boucle[cite: 2416].
# professions.py
professions = ['médecin', 'enseignant', 'commerçant']
for profession in professions # Erreur ici !
print(profession)Si vous oubliez accidentellement les deux-points, comme montré ici, vous obtiendrez une erreur de syntaxe car Python ne sait pas ce que vous essayez de faire. Bien que ce soit une erreur facile à corriger, ce n’est pas toujours une erreur facile à trouver. Vous seriez surpris du temps que les programmeurs passent à traquer des erreurs d’un seul caractère comme celle-ci[cite: 2419].
Parcourir une liste entière¶
Très souvent, vous devrez exécuter la même action sur chaque élément d’une liste. Par exemple, vous voudrez peut-être afficher chaque élément d’une liste de fruits ou envoyer un message personnalisé à chaque ami d’une liste. Lorsque vous souhaitez faire cela, vous pouvez utiliser la boucle for en Python.
fruits = ['pomme', 'banane', 'orange']
for fruit in fruits:
print(fruit)pomme
banane
orange
Un examen plus approfondi de la boucle¶
Dans cet exemple, la boucle for prend chaque élément de la liste fruits et le stocke dans la variable fruit. Ensuite, Python exécute les actions que vous avez spécifiées pour chaque fruit. Ce processus se poursuit jusqu’à ce que tous les éléments de la liste aient été parcourus.
Nous pouvons améliorer notre boucle en faisant plus qu’afficher chaque élément. Ajoutons une phrase personnalisée pour chaque ami dans notre liste.
amis = ['Marie', 'Jean', 'Sophie']
for ami in amis:
print(f"Salut {ami}, comment vas-tu aujourd'hui ?")
print(f"C'était génial de te voir la semaine dernière, {ami}.\n")Salut Marie, comment vas-tu aujourd'hui ?
C'était génial de te voir la semaine dernière, Marie.
Salut Jean, comment vas-tu aujourd'hui ?
C'était génial de te voir la semaine dernière, Jean.
Salut Sophie, comment vas-tu aujourd'hui ?
C'était génial de te voir la semaine dernière, Sophie.
Dans cet exemple, nous faisons deux actions pour chaque ami dans la liste: nous affichons une salutation et un commentaire personnel. Voici ce qui sera affiché:
Salut Marie, comment vas-tu aujourd'hui ?
C'était génial de te voir la semaine dernière, Marie.
Salut Jean, comment vas-tu aujourd'hui ?
C'était génial de te voir la semaine dernière, Jean.
Salut Sophie, comment vas-tu aujourd'hui ?
C'était génial de te voir la semaine dernière, Sophie.Effectuer des actions après une boucle¶
Une fois la boucle terminée, Python continue d’exécuter les instructions suivantes. Vous pouvez donc ajouter des actions à effectuer après que la boucle a parcouru tous les éléments de la liste.
amis = ['Marie', 'Jean', 'Sophie']
for ami in amis:
print(f"Salut {ami}, comment vas-tu aujourd'hui ?")
print("\nMerci à vous tous, chers amis !")Salut Marie, comment vas-tu aujourd'hui ?
Salut Jean, comment vas-tu aujourd'hui ?
Salut Sophie, comment vas-tu aujourd'hui ?
Merci à vous tous, chers amis !
Dans cet exemple, après avoir salué chaque ami, Python affiche un message de remerciement.
Éviter les erreurs d’indentation¶
En Python, l’indentation est très importante. Elle indique à Python quelles instructions font partie de la boucle et lesquelles sont en dehors. Si vous oubliez d’indenter, Python générera une erreur d’indentation. Voici quelques erreurs communes d’indentation et comment les éviter.
Oublier d’indenter¶
Si vous oubliez d’indenter les lignes dans une boucle for, Python génère une erreur comme celle-ci:
amis = ['Marie', 'Jean', 'Sophie']
for ami in amis:
print(ami) # Erreur : la ligne doit être indentée File "<ipython-input-3-d09b21a56533>", line 3
print(ami) # Erreur : la ligne doit être indentée
^
IndentationError: expected an indented block after 'for' statement on line 2
Indentation inutile¶
Si vous indentez une ligne qui ne devrait pas l’être, Python génère une autre erreur d’indentation.
message = "Bonjour à tous !"
print(message) # Indentation inutile ici File "<ipython-input-4-7a64cace665f>", line 2
print(message) # Indentation inutile ici
^
IndentationError: unexpected indent
Travailler avec des listes numériques¶
Python vous permet de générer facilement une liste de nombres, ce qui peut être utile dans de nombreux cas. La fonction range() facilite la génération de nombres.
Utiliser la fonction range()¶
La fonction range() génère une série de nombres. Par exemple, vous pouvez utiliser range() pour afficher les nombres de 1 à 5.
for nombre in range(1, 6):
print(nombre)1
2
3
4
5
Créer une liste de nombres avec range()¶
Si vous voulez conserver ces nombres dans une liste, vous pouvez utiliser la fonction list() pour convertir le résultat de range() en une liste.
nombres = list(range(1, 6))
print(nombres)[1, 2, 3, 4, 5]
Statistiques simples avec des listes de nombres¶
Vous pouvez facilement effectuer des calculs statistiques sur une liste de nombres, comme trouver le minimum, le maximum ou la somme des nombres dans une liste.
nombres = [1, 2, 3, 4, 5]
print(min(nombres)) # Affiche le plus petit nombre
print(max(nombres)) # Affiche le plus grand nombre
print(sum(nombres)) # Affiche la somme des nombres1
5
15
Compréhensions de liste¶
Une compréhension de liste permet de générer une liste en une seule ligne de code, ce qui est souvent plus concis.
Exemple : générer les carrés des nombres de 1 à 10.
carres = [nombre**2 for nombre in range(11, 24)]
print(carres)[121, 144, 169, 196, 225, 256, 289, 324, 361, 400, 441, 484, 529]
Travailler avec une partie de la liste¶
Il est possible de travailler uniquement avec une partie d’une liste, en créant une tranche (slicing). Vous pouvez choisir une sous-liste en spécifiant les indices de début et de fin.
fruits = ['pomme', 'banane', 'orange', 'kiwi', 'mangue']
print(fruits[1:4]) # Affiche les éléments de l'indice 1 à 3['banane', 'orange', 'kiwi']
Boucler sur une tranche¶
Vous pouvez également boucler sur une tranche spécifique d’une liste.
fruits = ['pomme', 'banane', 'orange', 'kiwi', 'mangue']
for fruit in fruits[:3]:
print(fruit)pomme
banane
orange
Copier une liste¶
Si vous souhaitez créer une copie d’une liste, vous pouvez utiliser la syntaxe des tranches sans spécifier d’indice de début ou de fin.
mes_fruits = ['pomme', 'banane', 'orange']
copie_fruits = mes_fruits[:]
print(copie_fruits)['pomme', 'banane', 'orange']
mes_fruits.append('kiwi')
print(mes_fruits)
print(copie_fruits)['pomme', 'banane', 'orange', 'kiwi']
['pomme', 'banane', 'orange']
cop_fruits = mes_fruits
print(cop_fruits)['pomme', 'banane', 'orange', 'kiwi']
mes_fruits.append('mangue')
print(mes_fruits)
print(cop_fruits)['pomme', 'banane', 'orange', 'kiwi', 'mangue']
['pomme', 'banane', 'orange', 'kiwi', 'mangue']
Travailler avec des tuples¶
Les tuples ressemblent beaucoup aux listes, sauf qu’ils sont immuables, c’est-à-dire que vous ne pouvez pas modifier les éléments une fois qu’ils sont définis. Vous pouvez définir un tuple en utilisant des parenthèses au lieu de crochets.
dimensions = (200, 50)
print(dimensions[0])
print(dimensions[1])200
50
Boucler sur un tuple¶
Vous pouvez utiliser une boucle for pour parcourir les éléments d’un tuple.
dimensions = (200, 50)
for dimension in dimensions:
print(dimension)200
50
Écraser un tuple¶
Bien que vous ne puissiez pas modifier un tuple, vous pouvez le redéfinir entièrement.
dimensions = (200, 50)
dimensions = (400, 100)
print(dimensions)(400, 100)
Résumé¶
Nous avons appris comment :
Parcourir une liste à l’aide d’une boucle
for.Manipuler des listes de nombres.
Créer des tranches de listes et travailler avec des sous-listes.
Utiliser des tuples pour stocker des ensembles de valeurs immuables.