Cómo concatenar dos o múltiples listas en Python

  1. + para concatenar dos listas en Python
  2. += para concatenar dos listas en el lugar en Python
  3. El método itertools.chain concatena dos listas en Python
  4. extend() método para concatenar listas en Python
  5. Método de desempaquetado a, b en la concatenación de listas en Python
  6. Conclusión

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]
Información

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.

Advertencia

El desembalaje iterativo no puede ser utilizado en la comprensión, como se demuestra a continuación.

>>> 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 -
a.extend(b) -

Utilizamos el módulo perfplot para comapare el rendimiento de los métodos anteriores.

Comparación del rendimiento de los métodos de concatenación de listas en Python

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.

Artículo relacionado - Python List

  • ¿Cuál es la diferencia entre del, remove y pop en las listas Python
  • Cómo deduplicar una lista en Python
  • comments powered by Disqus