HOWTO · Python
Cómo concatenar dos o múltiples listas en Python
Este tutorial introduce cómo concatenar dos o múltiples listas en Python y compara el rendimiento entre diferentes métodos
En esta página
Una lista en Python es una estructura de datos que contiene una colección ordenada de elementos.
Una operación para pegar dos listas se llama concentración. Se pueden concatenar dos listas en Python ya sea in-place o out-of-place.
Supongamos que tenemos dos listas para ser concatenadas,
list1 = [1, 2, 3, 4]
list2 = [5, 6, 7, 8]
Podríamos tener múltiples métodos para concatenarlas, pero difieren en el rendimiento cuando la longitud aumenta o el número de listas concatenadas aumenta.
Presentaremos estos diferentes métodos y le daremos la comparación de rendimiento.
+ para concatenar dos listas en Python
El operador + podría concatenar dos listas y devolver una nueva lista.
>>> list1 = [1, 2, 3, 4]
>>> list2 = [5, 6, 7, 8]
>>> result = list1 + list2
>>> result
[1, 2, 3, 4, 5, 6, 7, 8]
+= para concatenar dos listas en el lugar en Python
+= es similar al método anterior, pero cambiará los datos de la primera lista en su lugar.
>>> list1 = [1, 2, 3, 4]
>>> list2 = [5, 6, 7, 8]
>>> list1 += list2
>>> list1
[1, 2, 3, 4, 5, 6, 7, 8]
El método itertools.chain concatena dos listas en Python
chain del módulo itertools trata las secuencias consecutivas como una sola secuencia,
>>> 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 tiene un constructor alternativo - intertools.chain.from_iterable(). Tiene un único argumento iterable cuyas entradas se evalúan perezosamente.extend() método para concatenar listas en Python
El método list extend extiende la lista añadiendo elementos del iterable.
>>> list1 = [1, 2, 3, 4]
>>> list2 = [5, 6, 7, 8]
>>> list1.extend(list2)
>>> list1
[1, 2, 3, 4, 5, 6, 7, 8]
También cambia los datos de la lista existente en lugar de devolver una nueva lista.
Método de desempaquetado a, b en la concatenación de listas en Python
Desembalajes adicionales como * para el operador de desembalaje iterable y ** para el operador de desembalaje de diccionario se extienden desde Python 3.5 como se explica en PEP-0448.
>>> list1 = [1, 2, 3, 4]
>>> list2 = [5, 6, 7, 8]
>>> result = [*list1, list2]
>>> result
[1, 2, 3, 4, 5, 6, 7, 8]
Este método no puede aplicarse al caso de N listas a menos que quiera desempaquetar cada lista manualmente.
>>> 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
Conclusión
| Versión | ¿En el lugar? | |
|---|---|---|
a + b |
- | No |
list(intertools.chain(a,b)) |
>=2.3 | No |
[*a, *b] |
>=3.5 | No |
a += b |
- | Sí |
a.extend(b) |
- | Sí |
Utilizamos el módulo perfplot para comapare el rendimiento de los métodos anteriores.
Como se muestra en el gráfico, los métodos a.extend(b) y a+b son casi iguales en cuanto al rendimiento y los mejores entre todos los métodos. El método list(chain(a,b)) tiene el peor rendimiento.