Utilisation des Listes en Python
Mise à jour :
Les listes en Python sont une structure de données fondamentale et extrêmement puissante. Elles permettent de stocker plusieurs éléments dans une seule variable, offrant une flexibilité dans la gestion de collections de données, qu’il s’agisse de nombres, de chaînes de caractères, d’objets ou même de structures plus complexes comme des listes de listes. Leur principal atout réside dans leur capacité à être modifiable, permettant d’ajouter, supprimer et manipuler les éléments d’une liste selon les besoins.
Pourquoi utiliser les listes ?
Les listes sont idéales pour stocker des séquences d’éléments liés entre eux, comme des informations de suivi pour un projet, une liste de courses, ou encore des données de capteurs dans une application IoT. En Python, les listes sont simples à manipuler et intuitives, ce qui en fait un choix privilégié pour les développeurs de tous niveaux.
Créer et initialiser une liste
La création d’une liste en Python est très simple. Les listes se définissent en
entourant les éléments par des crochets []
. Ces éléments peuvent être de
tout type : entiers, chaînes de caractères, booléens, voire d’autres listes,
rendant les listes Python très flexibles.
Créer une liste vide
Pour créer une liste sans élément, utilisez simplement des crochets vides []
:
Cela initialise une liste vide, prête à être remplie. Une liste vide peut être utile dans de nombreux contextes, par exemple lorsque l’on souhaite collecter des éléments au fur et à mesure dans une boucle.
Créer une liste avec des valeurs initiales
Vous pouvez également initialiser une liste avec des valeurs prédéfinies :
Dans cet exemple, ma_liste
contient cinq éléments de type entier. Cette
méthode est idéale pour les cas où vous connaissez déjà les éléments à ajouter.
Créer une liste avec des éléments de types différents
Une liste en Python peut contenir des éléments de types variés, ce qui permet d’imbriquer des données de différents types dans une même collection :
Ici, la liste contient un entier, une chaîne de caractères, un booléen et un nombre à virgule flottante. Cette flexibilité permet de regrouper des données diverses dans une seule variable.
Générer automatiquement des valeurs avec range()
Si vous avez besoin d’une séquence de nombres, vous pouvez utiliser la fonction
range()
, souvent en combinaison avec list()
. Par exemple, pour créer une
liste de nombres de 0 à 9 :
La fonction range()
génère une séquence de nombres que list()
convertit en
liste.
Accéder aux éléments d’une liste
Une fois qu’une liste est créée, vous devez savoir comment accéder à ses éléments pour les utiliser ou les modifier. Les listes Python utilisent l’indexation pour accéder à chaque élément.
Indexation de base
Les listes sont des séquences indexées en Python, ce qui signifie que chaque
élément possède une position dans la liste, appelée index. L’indexation
commence à 0
, donc le premier élément d’une liste est situé à l’index 0
, le
deuxième à l’index 1
, et ainsi de suite.
Utilisation de l’indexation négative
Python permet aussi d’accéder aux éléments d’une liste en utilisant des
indices négatifs, ce qui est particulièrement utile pour accéder aux
éléments depuis la fin de la liste. L’index -1
correspond au dernier élément,
-2
à l’avant-dernier, et ainsi de suite.
Extraire une sous-liste avec le slicing
Le slicing permet de sélectionner une partie de la liste (une sous-liste). Cette technique est particulièrement utile pour obtenir une série d’éléments situés à des indices consécutifs.
Utilisation du pas (step) dans le slicing
En ajoutant un troisième argument au slicing, vous pouvez spécifier un pas pour sauter des éléments.
Avec le slicing ma_liste[0:5:2]
, on sélectionne les éléments de la liste en
sautant un élément sur deux.
Ajouter et supprimer des éléments
Python offre différentes méthodes pour ajouter ou supprimer des éléments d’une liste, rendant la modification de listes très flexible.
Ajouter un élément avec append()
La méthode append()
ajoute un élément à la fin de la liste :
Insérer un élément à une position spécifique avec insert()
Pour insérer un élément à une position précise, utilisez insert(index, element)
:
Ajouter plusieurs éléments avec extend()
Pour ajouter plusieurs éléments en une fois, extend()
est idéal :
Supprimer un élément avec remove()
La méthode remove()
supprime la première occurrence d’un élément :
Supprimer un élément avec pop()
pop()
supprime un élément à une position donnée et le retourne. Si aucun
index n’est précisé, il retire et retourne le dernier élément :
Supprimer un élément avec del
L’instruction del
permet de supprimer un élément par son index, ou même un
groupe d’éléments avec le slicing :
Modifier les éléments d’une liste
Les listes en Python sont modifiables (ou mutables), ce qui signifie que vous pouvez changer la valeur des éléments existants.
Modifier un élément spécifique
Pour modifier un élément, accédez à sa position avec son index et assignez-lui une nouvelle valeur :
Modifier plusieurs éléments avec le slicing
Vous pouvez utiliser le slicing pour modifier plusieurs éléments à la fois :
Ajouter ou supprimer des éléments avec le slicing
Le slicing permet également d’ajouter ou de supprimer des éléments en une opération :
Ici, 40
et 50
sont insérés à l’index 2
.
Fonctions intégrées utiles pour les listes
Python propose de nombreuses fonctions intégrées pour manipuler les listes de manière efficace. Ces fonctions permettent d’obtenir des informations sur une liste ou d’effectuer des opérations courantes comme le comptage, le tri ou l’inversion des éléments.
Longueur de la liste avec len()
La fonction len()
est utilisée pour obtenir le nombre d’éléments présents
dans une liste, ce qui peut être pratique dans des boucles ou pour vérifier si
une liste est vide :
Ici, len(ma_liste)
renvoie 5
car la liste contient cinq éléments.
Trouver la position d’un élément avec index()
La méthode index()
permet de trouver la première position d’un élément
spécifique dans une liste. Si l’élément n’est pas trouvé, Python génère une
erreur ValueError
:
Dans cet exemple, index()
renvoie 2
car l’élément 30
se trouve à l’index
2
dans la liste.
Vérifier la présence d’un élément avec in
Vous pouvez utiliser l’opérateur in
pour vérifier si un élément existe
dans une liste. Cela renvoie True
si l’élément est trouvé, et False
sinon :
Compter les occurrences d’un élément avec count()
La méthode count()
permet de compter le nombre d’occurrences d’un élément
spécifique dans la liste. Cela peut être utile pour analyser des données ou
trouver les doublons :
Dans cet exemple, count()
retourne 3
car le nombre 20
apparaît trois fois
dans la liste ma_liste
.
Trier une liste avec sort()
La méthode sort()
trie les éléments d’une liste dans l’ordre croissant par
défaut, mais elle peut également trier en ordre décroissant en utilisant
l’argument reverse=True
:
Le tri est fait en place, ce qui signifie que la liste d’origine est modifiée.
Si vous souhaitez conserver la liste initiale, utilisez la fonction sorted()
pour créer une nouvelle liste triée.
Inverser une liste avec reverse()
La méthode reverse()
permet d’inverser l’ordre des éléments dans une
liste. Contrairement à sort()
, cette méthode ne trie pas mais retourne
simplement les éléments dans l’ordre opposé :
Boucles et itérations sur une liste
Parcourir les éléments d’une liste est une opération fréquente en Python, notamment pour appliquer des opérations à chaque élément. Cette section vous montre comment utiliser les boucles pour itérer sur les éléments d’une liste.
Parcourir une liste avec une boucle for
La manière la plus simple et la plus courante de parcourir une liste est
d’utiliser une boucle for
. Elle vous permet d’accéder à chaque élément de la
liste :
Dans cet exemple, chaque élément de ma_liste
est affiché un par un. C’est la
méthode privilégiée pour des opérations simples.
Utiliser enumerate()
pour obtenir les index et les éléments
Parfois, vous avez besoin de l’index de chaque élément en plus de sa valeur.
Dans ce cas, utilisez la fonction enumerate()
qui vous permet de récupérer à
la fois l’index et l’élément :
enumerate()
renvoie des couples index, valeur
pour chaque élément de la
liste, ce qui est pratique dans les cas où la position de l’élément est
importante pour le traitement.
Parcourir une liste avec une boucle while
Une autre méthode pour parcourir une liste est d’utiliser une boucle while
.
Elle peut être utile si vous voulez parcourir la liste jusqu’à ce qu’une
condition spécifique soit remplie :
Ici, nous utilisons un compteur index
pour accéder aux éléments de
ma_liste
jusqu’à ce que tous les éléments aient été parcourus.
Listes imbriquées (listes de listes)
Les listes imbriquées sont des listes qui contiennent d’autres listes comme éléments. Elles permettent de créer des structures de données plus complexes, comme des matrices ou des tableaux multidimensionnels.
Créer une liste imbriquée
Pour créer une liste imbriquée, il suffit d’inclure des sous-listes au sein d’une liste principale :
Ici, ma_liste
est une liste de trois sous-listes, chacune contenant trois
éléments.
Accéder aux éléments d’une liste imbriquée
Pour accéder aux éléments d’une liste imbriquée, vous utiliserez deux niveaux d’indexation. Le premier index sélectionne la sous-liste, le second sélectionne l’élément dans cette sous-liste.
Dans cet exemple, ma_liste[0]
renvoie la première sous-liste [1, 2, 3]
, et
ma_liste[0][1]
renvoie le deuxième élément de cette sous-liste, soit 2
.
Parcourir une liste imbriquée avec des boucles
Pour parcourir tous les éléments d’une liste imbriquée, utilisez des boucles imbriquées : une première boucle pour parcourir les sous-listes et une seconde pour parcourir les éléments de chaque sous-liste.
Chaque sous_liste
est parcourue dans la boucle externe, et chaque element
dans la boucle interne.
Utiliser des compréhensions de liste avec des listes imbriquées
Les compréhensions de liste peuvent être imbriquées pour manipuler des listes imbriquées de manière concise. Par exemple, pour aplatir une liste imbriquée en une liste simple :
Dans cet exemple, chaque element
est extrait de chaque sous_liste
pour créer
une liste aplanie, aplatie
.
Les compréhensions de liste
Les compréhensions de liste permettent de créer de nouvelles listes de manière concise et lisible. Elles sont particulièrement utiles pour effectuer des transformations ou des filtrages rapides.
Syntaxe de base des compréhensions de liste
La syntaxe de base d’une compréhension de liste consiste en une expression
suivie d’une boucle for
. Par exemple, pour créer une liste des carrés des
éléments d’une liste existante :
Utiliser des conditions dans les compréhensions de liste
Les compréhensions de liste peuvent inclure des conditions pour filtrer les éléments :
Ici, seuls les éléments pairs de ma_liste
sont inclus dans la nouvelle liste
pairs
.
Compréhensions de liste imbriquées
Les compréhensions de liste imbriquées permettent de manipuler les listes imbriquées de manière concise. Par exemple, pour obtenir les carrés des éléments d’une liste imbriquée :
Chaque sous-liste est parcourue pour calculer les carrés des éléments.
Méthodes avancées sur les listes
Enfin, Python propose des méthodes avancées pour copier, fusionner et
transformer les listes de manière efficace, notamment avec map()
et
filter()
.
Copier une liste
Pour créer une copie d’une liste, vous pouvez utiliser copy()
ou le slicing
[:]
. Cela évite de modifier la liste d’origine par inadvertance :
Fusionner des listes
Pour fusionner deux listes, utilisez l’opérateur +
ou la méthode extend()
:
Utiliser map()
et filter()
map()
applique une fonction à chaque élément d’une liste, tandis que
filter()
sélectionne les éléments répondant à une condition :
Exercice : Gestion d’une Liste de Courses
Énoncé
Cet exercice vous guide pas à pas dans la création d’un programme Python qui permet de gérer une liste de courses. Vous allez apprendre à utiliser les opérations de base sur les listes, les boucles, les conditions et les fonctions pour créer une petite application en ligne de commande.
Objectif : Créer un programme Python interactif permettant d’ajouter, de supprimer, de modifier et de visualiser les articles d’une liste de courses.
Étape 1 : Initialiser la Liste
- Créez une liste vide nommée
liste_courses
pour stocker les articles. - Demandez à l’utilisateur s’il souhaite commencer avec une liste d’articles.
S’il répond “oui”, invitez-le à entrer des articles séparés par des virgules.
Utilisez la méthode appropriée pour ajouter ces articles à
liste_courses
. - Affichez la liste initiale des articles, qu’ils aient été ajoutés ou non.
Étape 2 : Ajouter un Article
- Demandez à l’utilisateur de saisir un article à ajouter à la liste.
- Ajoutez cet article à la liste
liste_courses
. - Affichez un message confirmant que l’article a bien été ajouté, et montrez la liste mise à jour.
Étape 3 : Supprimer un Article
- Demandez à l’utilisateur quel article il souhaite retirer de la liste.
- Vérifiez que cet article est bien présent dans
liste_courses
. Si c’est le cas, supprimez-le. Sinon, affichez un message indiquant que l’article n’est pas dans la liste. - Affichez la liste mise à jour après chaque suppression.
Étape 4 : Modifier un Article
- Demandez à l’utilisateur quel article il souhaite modifier.
- Vérifiez que cet article est bien présent dans
liste_courses
. S’il est présent, demandez à l’utilisateur de saisir la nouvelle valeur pour cet article et mettez la liste à jour. - Affichez la liste actualisée après chaque modification.
Étape 5 : Afficher la Liste
- Ajoutez une option pour permettre à l’utilisateur d’afficher la liste complète de ses courses.
- Formatez l’affichage pour que chaque article soit précédé de son numéro (ex. “1. Pain”, “2. Lait”, etc.).
Étape 6 : Menu Interactif
- Ajoutez un menu principal qui affiche les options suivantes :
- “1 : Afficher la liste des courses”
- “2 : Ajouter un article”
- “3 : Supprimer un article”
- “4 : Modifier un article”
- “5 : Quitter”
- Faites en sorte que le programme répète ce menu après chaque action, jusqu’à ce que l’utilisateur choisisse de quitter.
Étape 7 : Gérer les Erreurs d’Entrée
- Assurez-vous que votre programme peut gérer les erreurs d’entrée courantes :
- Si l’utilisateur essaie de supprimer ou de modifier un article qui n’est pas dans la liste, affichez un message d’erreur.
- Si l’utilisateur entre une option de menu invalide, affichez un message d’erreur et affichez de nouveau le menu.
Étape 8 : Rendre le Code Plus Lisible avec des Fonctions
- Créez des fonctions pour chaque action (par exemple :
afficher_liste()
,ajouter_article()
,supprimer_article()
, etc.). - Modifiez votre programme pour qu’il utilise ces fonctions, ce qui le rendra plus lisible et organisé.
Solution Pas à Pas
Étape 1 : Initialiser la Liste
Étape 2 : Ajouter un Article
Étape 3 : Supprimer un Article
Étape 4 : Modifier un Article
Étape 5 : Afficher la Liste
Étape 6 : Menu Interactif
Étape 7 : Gérer les Erreurs d’Entrée
Dans ce code, les erreurs courantes sont déjà gérées dans chaque fonction
(supprimer_article
et modifier_article
vérifient la présence de l’article
avant d’effectuer des modifications, et le menu inclut une vérification des
options).
Étape 8 : Rendre le Code Plus Lisible avec des Fonctions
Chaque étape est déjà encapsulée dans des fonctions (ajouter_article()
,
supprimer_article()
, modifier_article()
et afficher_liste()
), rendant le
programme plus structuré et facile à lire.
Bonnes pratiques pour travailler avec les listes
Travailler avec des listes en Python de manière efficace implique de suivre certaines bonnes pratiques pour garantir un code optimisé, lisible et évitant les erreurs courantes. Ces pratiques vous aident à écrire un code plus sûr et plus performant.
Privilégiez les compréhensions de liste pour les opérations simples
Les compréhensions de liste sont non seulement plus concises, mais souvent plus rapides que les boucles traditionnelles pour créer ou transformer des listes. Par exemple, pour obtenir une liste de carrés :
Cette syntaxe est plus claire et plus efficace que de créer une liste avec une
boucle for
.
Évitez de modifier une liste pendant son parcours
La modification d’une liste pendant son parcours peut causer des comportements inattendus, en particulier lors de la suppression d’éléments. Si vous avez besoin de transformer une liste, il est souvent préférable de créer une nouvelle liste plutôt que de modifier la liste d’origine :
Utilisez les copies de liste pour préserver l’intégrité de la liste d’origine
Si vous devez conserver la liste d’origine intacte tout en la modifiant
temporairement, créez une copie à l’aide de copy()
ou du slicing [:]
:
Cette pratique est particulièrement importante lorsque vous passez des listes à des fonctions, car Python passe les listes par référence, ce qui peut entraîner des modifications inattendues de la liste originale.
Attention aux listes imbriquées et aux copies profondes
Si vous travaillez avec des listes imbriquées, il est important de savoir que
copy()
ou le slicing [:]
ne créent qu’une copie peu profonde (shallow
copy). Cela signifie que les sous-listes ne sont pas copiées indépendamment.
Pour créer une copie profonde (deep copy) d’une liste imbriquée, utilisez le
module copy
et sa fonction deepcopy()
:
La copie profonde crée des duplicatas de toutes les sous-listes, préservant ainsi la liste d’origine.
Optimisez les opérations coûteuses
Certaines opérations comme le tri (sort()
) ou l’inversion (reverse()
)
modifient la liste en place. Si vous souhaitez obtenir une version triée ou
inversée sans modifier la liste d’origine, utilisez les fonctions sorted()
et
reversed()
:
En utilisant sorted()
et reversed()
, vous pouvez obtenir une nouvelle
version triée ou inversée sans toucher à la liste originale.
Limitez les conversions entre listes et autres types de données
Python vous permet de convertir des listes en d’autres types, comme des tuples ou des ensembles, mais chaque conversion utilise des ressources. Limitez les conversions inutiles et assurez-vous que la conversion est vraiment nécessaire pour optimiser les performances de votre code :
Dans cet exemple, la conversion est justifiée pour supprimer les doublons, mais une conversion inutile peut ralentir le programme.
Utilisez join()
pour assembler des listes de chaînes de caractères
Si vous travaillez avec des listes de chaînes de caractères que vous devez
assembler, join()
est beaucoup plus performant que de faire des concaténations
successives. Par exemple :
En appliquant ces bonnes pratiques, vous pourrez manipuler les listes en Python de manière optimale. Les listes sont un outil puissant, et en suivant ces conseils, vous réduirez les risques d’erreurs tout en maximisant les performances de votre code. Les listes permettent une gestion flexible des données, et ce guide vous donne toutes les clés pour les maîtriser avec efficacité.
Conclusion
Les listes en Python sont un élément central de la programmation, offrant une combinaison unique de flexibilité et de simplicité. Que vous travailliez sur des projets de petite envergure ou que vous manipuliez des données complexes, les listes sont incontournables pour structurer et gérer les informations.