HOWTO · Python

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

Este tutorial explica cómo concatenar dos o más listas en Python y cómo elegir un método según si quieres modificar una lista existente o crear un resultado nuevo.

En esta página

Concatena listas con + cuando quieras crear una lista nueva, o usa extend() o += para añadir elementos a una lista existente. Para combinar varias listas, el desempaquetado de iterables es conciso; itertools.chain() resulta útil si quieres procesar los valores como un iterador. Los ejemplos siguientes usan las mismas listas para que puedas comparar cada resultado.

Las listas de Python contienen elementos ordenados y pueden combinarse de varias maneras. Elige según si quieres modificar la lista original y si el siguiente paso necesita una lista o un iterador.

Concatenar listas con el operador +

El operador + crea una lista nueva y no modifica ninguna de las listas de entrada. Funciona con dos o más listas, y cada + adicional combina otra lista.

first = [1, 2, 3]
second = [4, 5]
third = [6, 7]
combined = first + second + third
print(combined)

Por ejemplo, al asignar first = first + second, first pasa a referirse a la nueva lista combinada; la lista original no se amplía en el mismo lugar. Usa + cuando te convenga conservar disponibles las listas de origen.

Ampliar una lista con extend()

extend() añade al final de la lista en la que se invoca cada elemento de un iterable. Modifica esa lista y devuelve None, así que conserva la lista de destino en una variable en lugar de asignar el resultado de la llamada al método.

first = [1, 2, 3]
second = [4, 5]
first.extend(second)

Esto es distinto de first.append(second): append() añade second como un único elemento anidado, mientras que extend() añade sus elementos por separado. El iterable puede ser una lista, una tupla u otro tipo de iterable.

Usar += para ampliar una lista en el mismo lugar

En una lista, += añade a la lista existente los elementos del iterable situado a la derecha, de forma parecida a extend().

first = [1, 2, 3]
second = [4, 5]
first += second

Es una opción concisa cuando quieres actualizar la lista de la izquierda. En cambio, first = first + second crea una lista nueva y vincula el nombre first a ella.

Concatenar listas mediante desempaquetado

El desempaquetado de iterables coloca los elementos de cada lista de origen en un nuevo literal de lista. Admite dos o más listas y deja intactas las listas de entrada.

first = [1, 2, 3]
second = [4, 5]
third = [6, 7]
combined = [*first, *second, *third]

El operador * expande cada iterable dentro de los corchetes y produce una sola lista plana. Esta forma de desempaquetado se introdujo en Python 3.5 (consulta PEP 448).

Usar itertools.chain()

itertools.chain() produce los elementos de sus iterables de entrada en orden. Devuelve un iterador, así que envuélvelo en list() cuando necesites una lista concreta.

from itertools import chain

first = [1, 2, 3]
second = [4, 5]
third = [6, 7]
combined = list(chain(first, second, third))

Mantener el iterador evita crear de antemano la lista combinada cuando solo necesitas recorrer los valores. Consulta la documentación de Python sobre itertools.chain().

Concatenar listas con un bucle o una comprensión de listas

Un bucle resulta útil cuando hay que procesar cada elemento de otra manera. append() añade un elemento cada vez, por lo que debes recorrer cada lista de origen para obtener un resultado plano.

lists = [[1, 2, 3], [4, 5], [6, 7]]
combined = []
for current in lists:
    for item in current:
        combined.append(item)

Una comprensión de listas expresa el mismo recorrido de forma concisa:

lists = [[1, 2, 3], [4, 5], [6, 7]]
combined = [item for current in lists for item in current]

Ambas opciones crean una lista nueva. Usa el bucle cuando convenga explicar sus pasos o añadir lógica; usa la comprensión para una expresión directa que aplana las listas.

Comparar los métodos y elegir uno

Método ¿Modifica una entrada? Resultado ¿Funciona con varias listas?
+ No Lista nueva Sí
extend() Sí, la lista de destino None como resultado de la llamada Una llamada por cada lista de origen
+= Sí, la lista de la izquierda Modifica la lista de la izquierda en el mismo lugar Aplicar a cada lista de origen
Desempaquetado No Lista nueva Sí
itertools.chain() No Iterador Sí
Bucle o comprensión No Lista nueva Sí

Usa + o el desempaquetado para crear una lista nueva y legible, y extend() o += para ampliar una lista existente. Elige itertools.chain() cuando el siguiente paso pueda trabajar con un iterador; conviértelo con list() si el código posterior necesita acceder a elementos por índice o usar métodos de lista. Estos métodos difieren en cómo asignan memoria y modifican las listas, pero no hay un único orden de rendimiento válido para todos los tamaños de entrada y cargas de trabajo; si el tiempo de ejecución o la memoria son decisivos, mide con datos representativos.

Conclusión

Para concatenar dos o más listas de Python, usa + o el desempaquetado para crear una lista nueva, extend() o += para modificar una lista de destino, e itertools.chain() para recorrer los elementos de forma diferida. Un bucle o una comprensión también puede crear una lista plana cuando esa forma encaje con el código que la rodea.