HOWTO · Python
Comment concaténer deux ou plusieurs listes en Python
Ce tutoriel présente comment concaténer deux ou plusieurs listes en Python et compare les performances entre différentes méthodes
Sur cette page
Une liste en Python est une structure de données qui contient une collection ordonnée d’éléments.
Une opération pour coller deux listes ensemble est appelée concaténation. Vous pouvez concaténer deux listes en Python soit en place soit déplacé.
Supposons que nous ayons deux listes à concaténer,
list1 = [1, 2, 3, 4]
list2 = [5, 6, 7, 8]
Nous pourrions avoir plusieurs méthodes pour les concaténer, mais elles diffèrent dans la performance lorsque la longueur augmente ou que le nombre de listes concaténées augmente.
Nous allons présenter ces différentes méthodes et vous donner la comparaison des performances.
+ pour concaténer deux listes en Python
L’opérateur + peut concaténer deux listes et renvoyer une nouvelle liste.
>>> list1 = [1, 2, 3, 4]
>>> list2 = [5, 6, 7, 8]
>>> result = list1 + list2
>>> result
[1, 2, 3, 4, 5, 6, 7, 8]
+= pour concaténer deux listes en place dans Python
+= est similaire à la méthode ci-dessus, mais il va changer les données de la première liste en place.
>>> list1 = [1, 2, 3, 4]
>>> list2 = [5, 6, 7, 8]
>>> list1 += list2
>>> list1
[1, 2, 3, 4, 5, 6, 7, 8]
La méthode itertools.chain concatène deux listes en Python
Chaîne du module itertools traite les séquences consécutives comme une seule séquence,
>>> list1 = [1, 2, 3, 4]
>>> list2 = [5, 6, 7, 8]
>>> import itertools
>>> result = list(itertools.chain(list1, list2))
[1, 2, 3, 4, 5, 6, 7, 8]
itertools.chain a un constructeur alternatif - intertools.chain.from_iterable(). Il a un seul argument itérable dont les entrées sont évaluées paresseusement.La méthode extend() pour concaténer des listes en Python
La méthode list extend étend la liste en ajoutant des éléments de l’itérable.
>>> list1 = [1, 2, 3, 4]
>>> list2 = [5, 6, 7, 8]
>>> list1.extend(list2)
>>> list1
[1, 2, 3, 4, 5, 6, 7, 8]
Elle modifie également les données de la liste existante en place plutôt que de retourner une nouvelle liste.
Méthode de décompression [*a, *b] dans la concaténation de listes Python
Des décompression supplémentaires comme * pour l’opérateur de décompression itérable et ** pour l’opérateur de décompression de dictionnaire sont étendues à partir de Python 3.5 comme expliqué dans PEP-0448.
>>> list1 = [1, 2, 3, 4]
>>> list2 = [5, 6, 7, 8]
>>> result = [*list1, list2]
>>> result
[1, 2, 3, 4, 5, 6, 7, 8]
Cette méthode ne pourrait pas être applicable au cas de N listes, à moins que vous ne souhaitiez décompresser chaque liste manuellement.
>>> A = [1,2,3]
>>> B = [4,5,6]
>>> C = [7,8,9]
>>> [*t for t in [A,B,C]]
SyntaxError: iterable unpacking cannot be used in comprehension
Conclusion
| Version | En place ? | |
|---|---|---|
a + b |
- | Non |
list(intertools.chain(a,b)) |
>=2.3 | Non |
[*a, *b] |
>=3.5 | Non |
a += b |
- | Oui |
a.extend(b) |
- | Oui |
Nous utilisons le module perfplot pour comapare la performance des méthodes ci-dessus.
Comme le montre le graphique, les méthodes a.extend(b) et a+b sont presque les mêmes dans la performance et les meilleures parmi toutes les méthodes. La méthode list(chain(a,b)) a la plus mauvaise performance.