HOWTO · Python
Comment concaténer deux ou plusieurs listes en Python
Découvrez comment concaténer deux listes ou plus en Python et choisissez une méthode selon qu’elle crée une nouvelle liste, modifie une liste existante ou fournit un itérateur.
Sur cette page
Utilisez + pour créer une nouvelle liste, ou extend() et += pour ajouter des éléments à une liste existante. Pour plusieurs listes, le déballage d’itérables est concis ; itertools.chain() convient lorsque vous souhaitez traiter les valeurs sous forme d’itérateur. Les exemples ci-dessous utilisent les mêmes listes pour illustrer le résultat de chaque méthode.
Les listes Python contiennent des éléments ordonnés et peuvent être combinées de plusieurs façons. Choisissez une méthode selon que vous souhaitez modifier la liste d’origine et selon que l’étape suivante nécessite une liste ou un itérateur.
Concaténer des listes avec l’opérateur +
L’opérateur + crée une nouvelle liste sans modifier les deux listes d’origine. Il fonctionne avec deux listes ou plus : chaque + supplémentaire permet d’en combiner une autre.
first = [1, 2, 3]
second = [4, 5]
third = [6, 7]
combined = first + second + third
print(combined)
Par exemple, l’affectation first = first + second fait référence, dans first, à la nouvelle liste combinée ; elle n’étend pas l’objet liste d’origine sur place. Utilisez + si vous souhaitez conserver les listes sources disponibles.
Étendre une liste avec extend()
extend() ajoute à la fin de la liste sur laquelle elle est appelée chaque élément d’un itérable. Cette méthode modifie la liste et renvoie None : conservez donc la liste de destination dans une variable au lieu d’affecter le résultat de l’appel de méthode.
first = [1, 2, 3]
second = [4, 5]
first.extend(second)
Ce comportement diffère de celui de first.append(second) : append() ajoute second comme un seul élément imbriqué, tandis que extend() en ajoute les éléments individuellement. L’itérable peut être une liste, un tuple ou un autre type d’itérable.
Utiliser += pour étendre une liste sur place
Pour une liste, += ajoute à la liste existante les éléments de l’itérable situé à droite de l’opérateur, comme le fait extend().
first = [1, 2, 3]
second = [4, 5]
first += second
C’est une façon concise de mettre à jour la liste située à gauche de l’opérateur. À l’inverse, first = first + second crée une nouvelle liste et associe le nom first à celle-ci.
Concaténer des listes avec le déballage
Le déballage d’itérables insère les éléments de chaque liste source dans un nouveau littéral de liste. Cette syntaxe accepte deux listes ou plus et ne modifie pas les listes d’origine.
first = [1, 2, 3]
second = [4, 5]
third = [6, 7]
combined = [*first, *second, *third]
L’opérateur * développe chaque itérable entre les crochets afin de produire une seule liste plate. Cette forme de déballage a été introduite dans Python 3.5 (voir PEP 448).
Utiliser itertools.chain()
itertools.chain() fournit les éléments de ses itérables d’entrée dans l’ordre. Cette fonction renvoie un itérateur ; convertissez-le avec list() si vous avez besoin d’une liste concrète.
from itertools import chain
first = [1, 2, 3]
second = [4, 5]
third = [6, 7]
combined = list(chain(first, second, third))
Conserver l’itérateur évite de construire immédiatement la liste combinée lorsque vous souhaitez seulement parcourir les valeurs. Consultez la documentation Python de itertools.chain().
Concaténer des listes avec une boucle ou une compréhension de liste
Une boucle est utile lorsqu’un traitement supplémentaire est nécessaire pour chaque élément. append() ajoute un seul élément à la fois ; parcourez donc chaque liste source pour obtenir un résultat plat.
lists = [[1, 2, 3], [4, 5], [6, 7]]
combined = []
for current in lists:
for item in current:
combined.append(item)
Une compréhension de liste exprime le même parcours de façon plus concise :
lists = [[1, 2, 3], [4, 5], [6, 7]]
combined = [item for current in lists for item in current]
Ces deux approches créent une nouvelle liste. Utilisez une boucle si ses étapes doivent être expliquées ou comportent une logique supplémentaire ; choisissez la compréhension pour exprimer directement l’aplatissement.
Comparer les méthodes et choisir celle qui convient
| Approche | Modifie une liste d’entrée ? | Résultat | Convient à plusieurs listes ? |
|---|---|---|---|
+ |
Non | Nouvelle liste | Oui |
extend() |
Oui, la liste de destination | None pour l’appel |
À appeler une fois par liste source |
+= |
Oui, la liste de gauche | Modifie la liste de gauche sur place | À appliquer pour chaque liste source |
| Déballage | Non | Nouvelle liste | Oui |
itertools.chain() |
Non | Itérateur | Oui |
| Boucle ou compréhension | Non | Nouvelle liste | Oui |
Utilisez + ou le déballage pour créer une nouvelle liste lisible, et extend() ou += pour agrandir une liste existante. Choisissez itertools.chain() si l’opération suivante peut utiliser un itérateur ; convertissez-le avec list() si la suite du code nécessite l’indexation ou les méthodes d’une liste. Ces approches diffèrent par leurs allocations et leur comportement en matière de modification, mais aucune ne surpasse systématiquement les autres pour toutes les tailles d’entrée et toutes les charges de travail. Si le temps d’exécution ou la mémoire est déterminant, mesurez des données représentatives.
Conclusion
Pour combiner deux listes Python ou plus, utilisez + ou le déballage pour créer une nouvelle liste, extend() ou += pour modifier une liste de destination, et itertools.chain() pour parcourir les éléments à la demande. Une boucle ou une compréhension peut également construire une nouvelle liste plate si cette forme convient au code environnant.