Comment concaténer deux ou plusieurs listes en Python
-
+
pour concaténer deux listes en Python -
+=
pour concaténer deux listes en place dans Python -
La méthode
itertools.chain
concatène deux listes en Python -
La méthode
extend()
pour concaténer des listes en Python -
Méthode de décompression
[*a, *b]
dans la concaténation de listes Python - Conclusion
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.
Un déballage inaltérable ne peut pas être utilisé pour la compréhension, comme démontré ci-dessous.
>>> 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.