Cómo unir listas en Python
Aprende todas las formas de unir o combinar listas en Python: el operador +, extend(), desempaquetado, itertools.chain y cómo str.join() convierte una lista en cadena.
Python ofrece varias formas de combinar listas y de convertir una lista de cadenas en una sola cadena. Esta página cubre ambas tareas con claridad:
- Unir listas — fusionar dos o más listas en una nueva lista (usando
+,extend(), desempaquetado oitertools.chain). - Unir elementos de una lista en una cadena — usando el método
str.join(), que concatena los elementos de una lista en una cadena delimitada.
Comprender la diferencia entre estas dos operaciones evita una fuente común de confusión para los principiantes.
Unir dos listas en una
Usando el operador +
La forma más sencilla de fusionar dos listas es el operador +. Devuelve una lista nueva que contiene todos los elementos de ambos operandos sin modificar los originales.
list1 = [1, 2, 3]
list2 = [4, 5, 6]
combined = list1 + list2
print(combined)Salida:
[1, 2, 3, 4, 5, 6]Puedes encadenar + para fusionar más de dos listas en una expresión: a + b + c.
Usando el método extend()
extend() añade todos los elementos de una lista al final de otra en el lugar. A diferencia de +, modifica la lista original y no crea una nueva.
list1 = [1, 2, 3]
list2 = [4, 5, 6]
list1.extend(list2)
print(list1)Salida:
[1, 2, 3, 4, 5, 6]Usa extend() cuando no necesites conservar list1 original intacta y quieras evitar crear una copia adicional en memoria.
extend() vs append(): append() añade su argumento como un único elemento, por lo que list1.append(list2) produce [1, 2, 3, [4, 5, 6]] — una lista anidada, no una fusionada. Usa siempre extend() cuando quieras aplanar la segunda lista dentro de la primera.
Usando desempaquetado (operador *)
Python 3.5 y versiones posteriores permiten la sintaxis de desempaquetado con asterisco dentro de un literal de lista. Es concisa y funciona con cualquier número de iterables en una sola expresión.
list1 = [1, 2, 3]
list2 = [4, 5, 6]
combined = [*list1, *list2]
print(combined)Salida:
[1, 2, 3, 4, 5, 6]También puedes insertar elementos adicionales en línea: [0, *list1, *list2, 7].
Usando itertools.chain()
itertools.chain() de la biblioteca estándar une cualquier número de iterables de forma perezosa — no se crea ninguna lista intermedia hasta que se solicitan los valores. Esta es la opción más eficiente en memoria cuando se procesan secuencias grandes.
import itertools
list1 = [1, 2, 3]
list2 = [4, 5, 6]
combined = list(itertools.chain(list1, list2))
print(combined)Salida:
[1, 2, 3, 4, 5, 6]Pasa itertools.chain(*nested) para aplanar una lista de listas en una sola llamada.
Unir elementos de una lista en una cadena con str.join()
str.join() es un método de string — se llama sobre la cadena delimitadora y toma un iterable como argumento. Devuelve una sola cadena con todos los elementos concatenados, separados por el delimitador.
delimiter.join(iterable)Ejemplo básico
Salida:
apple, banana, cherryPasa una cadena vacía '' como delimitador para concatenar sin ningún separador.
Delimitadores comunes
| Delimitador | Expresión | Resultado |
|---|---|---|
| Coma-espacio | ', '.join(['a', 'b', 'c']) | a, b, c |
| Espacio | ' '.join(['Python', 'is', 'great']) | Python is great |
| Guion | '-'.join(['2024', '01', '15']) | 2024-01-15 |
| Salto de línea | '\n'.join(['line one', 'line two']) | bloque multilínea |
| Sin separador | ''.join(['H', 'i', '!']) | Hi! |
Unir una lista de números
str.join() requiere que cada elemento sea una cadena. Pasar enteros directamente genera un TypeError. Conviértelos primero con map(str, ...) o una expresión generadora.
nums = [10, 20, 30]
result = ', '.join(map(str, nums))
print(result)Salida:
10, 20, 30Usar una expresión generadora logra el mismo resultado y permite formatear cada número sobre la marcha:
Salida:
12345Construir cadenas multilínea
'\n'.join() es la forma idiomática de construir una cadena multilínea a partir de una lista de líneas sin saltos de línea al final.
lines = ['line one', 'line two', 'line three']
block = '\n'.join(lines)
print(block)Salida:
line one
line two
line threeElegir el enfoque adecuado
| Objetivo | Mejor método |
|---|---|
| Fusionar dos listas en una nueva lista | operador + |
| Añadir todos los elementos de una lista a otra | extend() |
| Combinar múltiples iterables sin copia adicional | itertools.chain() |
| Combinar dentro de un literal o con elementos extra | desempaquetado [*a, *b] |
| Convertir una lista de cadenas en una cadena delimitada | str.join() |
| Convertir una lista de números en una cadena | str.join(map(str, lst)) |
Temas relacionados
- Python Lists — crear, indexar y segmentar listas
- List Methods — referencia completa de
append(),extend(),remove()y más - Loop Lists — iterar sobre elementos de una lista con
forywhile - Copy Lists — copia superficial vs. copia profunda
- List Comprehension — construir y transformar listas en una expresión
- Concatenate Strings — otras formas de construir cadenas a partir de partes