La méthode append() en Python reste le réflexe par défaut pour ajouter un élément à une liste. Elle fonctionne, personne ne le conteste. Le sujet ici est différent : mesurer ce que d’autres approches apportent en lisibilité, en performance ou en compatibilité avec les pratiques actuelles de l’écosystème Python.
Comparatif des alternatives à append pour construire une liste Python
| Méthode | Syntaxe type | Mutation en place | Cas d’usage principal |
|---|---|---|---|
| append() | liste.append(x) | Oui | Ajout unitaire, boucle impérative |
| List comprehension | [f(x) for x in source] | Non (nouvelle liste) | Transformation ou filtrage d’un itérable |
| Unpacking * | [*liste, x] | Non (nouvelle liste) | Construction déclarative, fusion de séquences |
| extend() | liste.extend(iterable) | Oui | Ajout de plusieurs éléments en une opération |
| Opérateur += | liste += [x, y] | Oui (réassignation interne) | Concaténation rapide en place |
| pd.concat() | pd.concat([df1, df2]) | Non (nouveau DataFrame) | Remplacement de DataFrame.append() supprimé |
Le tableau met en évidence une ligne de partage nette : les approches modernes privilégient la création d’une nouvelle liste (comprehension, unpacking) plutôt que la mutation en place. Ce choix n’est pas anodin, il modifie la façon dont le code se lit et se teste.
A lire en complément : Python introuvable, pip absent : comment rattraper une mauvaise Install pip installer ?

List comprehension et unpacking : pourquoi remplacer la boucle append
Le pattern classique consiste à initialiser une liste vide, ouvrir une boucle for, puis appeler append à chaque itération. La list comprehension compresse ces trois étapes en une seule expression.
A lire également : Comment se connecter à Arkevia ?
Prenons un cas concret : filtrer et transformer une liste de notes d’utilisateur. Avec append, le code occupe quatre lignes. Avec une comprehension, une seule ligne suffit : [note * 2 for note in notes if note > 10]. La lisibilité progresse parce que l’intention (filtrer puis transformer) apparait immédiatement, sans avoir à lire le corps de la boucle.
L’opérateur d’unpacking * pour fusionner des séquences
L’unpacking permet de construire une liste de manière déclarative, sans recourir à append. La syntaxe [*liste_existante, nouvel_element] crée une nouvelle liste qui inclut tous les éléments de la première plus l’ajout. Pour fusionner deux listes, [*a, *b] remplace un appel à extend ou une concaténation avec +.
Cette approche s’inscrit dans un style fonctionnel : on ne modifie pas la structure existante, on en produit une nouvelle. Le code qui en résulte se prête mieux aux tests unitaires, parce que la donnée d’entrée reste intacte après l’opération.
Abandon de DataFrame.append() dans pandas : un signal fort
L’écosystème des données a franchi un cap symbolique. La méthode DataFrame.append() a été dépréciée en pandas 1.4.0 puis supprimée en pandas 2.0. La recommandation officielle oriente vers pd.concat(), en passant une liste d’objets à concaténer.
La raison technique est simple : chaque appel à DataFrame.append() recopiait l’intégralité du DataFrame pour y ajouter une ligne. Sur des données volumineuses, la dégradation devenait sévère. La stratégie recommandée désormais consiste à collecter les données dans une liste Python de dictionnaires, puis à construire le DataFrame en une seule opération.
- Collecter chaque ligne sous forme de dictionnaire dans une liste ordinaire, sans toucher à pandas pendant l’accumulation.
- Appeler
pd.DataFrame(liste_de_dicts)une seule fois, en fin de collecte, pour créer la structure tabulaire. - Utiliser
pd.concat([df1, df2])quand il faut fusionner des DataFrames déjà existants, plutôt que de boucler avec append.
Ce changement dans pandas illustre une tendance plus large : les appels répétés à append sont remplacés par des constructions groupées. Le même raisonnement s’applique aux listes Python standard quand le volume de données augmente.

Quand append reste le bon choix en Python
Écarter append dans tous les cas serait une erreur. La méthode garde sa pertinence dans plusieurs situations précises.
Lorsque la logique d’ajout dépend d’un état qui évolue à chaque itération (un compteur, un résultat intermédiaire, une condition qui change), une comprehension devient difficile à lire. Le code impératif avec append exprime alors plus clairement la séquence des opérations.
Autre cas : quand la liste sert de tampon temporaire alimenté par des événements externes (lecture de fichier ligne par ligne, réception de messages réseau). La mutation en place avec append consomme moins de mémoire qu’une reconstruction de liste à chaque ajout, puisque Python sur-alloue la capacité interne de la liste pour amortir les ajouts successifs.
- Logique conditionnelle complexe avec état mutable : append dans une boucle for reste plus lisible qu’une comprehension imbriquée.
- Flux de données en continu où la taille finale est inconnue : append profite de l’amortissement mémoire des listes Python.
- Prototypage rapide où la concision n’est pas prioritaire : append ne demande aucune gymnastique syntaxique.
Extend, opérateur += et numpy : compléments pour des opérations sur listes
La méthode extend() ajoute chaque élément d’un itérable à la liste existante, là où append ajouterait l’itérable lui-même comme élément unique. Confondre les deux est une source classique de bugs : liste.append([4, 5]) produit [..., [4, 5]] (liste imbriquée), tandis que liste.extend([4, 5]) produit [..., 4, 5].
L’opérateur += se comporte comme extend pour les listes. La syntaxe ma_liste += [4, 5, 6] modifie la liste en place. En revanche, sur un tuple ou une variable locale dans une fonction, le comportement diffère parce que += déclenche une réassignation.
Numpy pour les opérations sur matrices et données numériques
Pour les structures de données numériques (matrice, vecteur, tableau multidimensionnel), numpy remplace avantageusement les listes Python. Les opérations vectorisées de numpy évitent les boucles avec append et traitent les éléments par blocs. Construire un tableau numpy par append répété est fortement déconseillé : chaque appel à numpy.append() recopie le tableau entier, exactement comme l’ancien DataFrame.append() de pandas.
Le choix entre append, comprehension, unpacking ou numpy dépend du contexte : type de données, volume, lisibilité recherchée. La tendance de l’écosystème Python pousse vers des constructions déclaratives et des opérations groupées. Adapter ses habitudes à cette direction, même progressivement, produit du code plus facile à maintenir et souvent plus rapide à exécuter.

