Volver a la lista

Comprensión de listas: crear una lista en una sola línea

Aprende a reducir los bucles a una sola línea utilizando comprensiones de listas (list comprehensions) en Python, incluyendo el filtrado por condiciones.

Principiante
|
8min
|
Verificado (2026-07)
comprensión de listaslist comprehensionlista en una líneafiltradodict comprehension
Progreso0/18 (0%)

Comprensión de listas — Crear una lista en una sola línea

Al finalizar este tema

Conocerás la sintaxis de las comprensiones de listas, que permiten convertir cuatro líneas de un bucle for en una sola línea, y podrás utilizar filtrado con condiciones y comprensiones de diccionarios.


Patrón de repetición del bucle for

Al crear una lista, es común escribir código como este:

python
numbers = [1, 2, 3, 4, 5]
squares = []
for n in numbers:
squares.append(n ** 2)
print(squares) # [1, 4, 9, 16, 25]

Son cuatro líneas. Crear una lista vacía, recorrerla con un bucle for, usar append y repetir este patrón continuamente. Python ofrece una sintaxis para reducir esto a una sola línea:

python
squares = [n ** 2 for n in numbers]

Esta es una comprensión de listas (list comprehension).


Estructura

python
[expresión for variable in iterable]

Cómo leerlo: «Extrae una variable a la vez de lo que es repetible y crea una lista con el resultado de aplicar la expresión.»

python
# Convertir cadenas a mayúsculas
names = ['alice', 'bob', 'charlie']
upper = [name.upper() for name in names]
# ['ALICE', 'BOB', 'CHARLIE']
# Longitud de las cadenas
lengths = [len(name) for name in names]
# [5, 3, 7]
# De 1 a 10
nums = [i for i in range(1, 11)]
# [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

Filtrado de condiciones: adición de if

python
[expresión for variable in iterable if condición]
python
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# Solo números pares
evens = [n for n in numbers if n % 2 == 0]
# [2, 4, 6, 8, 10]
# Cuadrados de los números mayores que 3
big_squares = [n ** 2 for n in numbers if n > 3]
# [16, 25, 36, 49, 64, 81, 100]

if actúa como un filtro. Solo se incluyen en los resultados aquellos que cumplen con la condición especificada.

Si se escribe usando un bucle for:

python
evens = []
for n in numbers:
if n % 2 == 0:
evens.append(n)

Cinco líneas se convierten en una sola.


if-else — Transformación condicional

Si desea realizar una transformación en lugar de un filtro, coloque if-else al principio:

python
# "par" si es par, "impar" si es impar
labels = ["par" if n % 2 == 0 else "impar" for n in range(1, 6)]
# ['impar', 'par', 'impar', 'par', 'impar']

La ubicación es diferente:

  • Filtro (exclusión): [x for x in lst if condición]if va al final
  • Transformación (selección): [A if condición else B for x in lst]if-else va al principio

Comprensión de diccionarios

Encerrar entre llaves crea un diccionario:

python
names = ['alice', 'bob', 'charlie']
name_len = {name: len(name) for name in names}
# {'alice': 5, 'bob': 3, 'charlie': 7}
python
# Invertir claves y valores
original = {'a': 1, 'b': 2, 'c': 3}
flipped = {v: k for k, v in original.items()}
# {1: 'a', 2: 'b', 3: 'c'}

Comprensión de conjuntos

Si solo se colocan valores entre llaves, es un conjunto:

python
words = ['hello', 'world', 'hello', 'python']
unique_lengths = {len(w) for w in words}
# {5, 6}

Advertencia de legibilidad

python
# Esto está bien
result = [x * 2 for x in range(10) if x % 2 == 0]
# Esto es difícil de leer
result = [f(x, y) for x in range(10) for y in range(10) if x != y if g(x, y) > threshold]

Si la comprensión no cabe en una sola línea, o si hay bucles for anidados + 2 o más condiciones, es mejor usar un bucle for convencional. El código corto no siempre es buen código. El buen código es el que se puede leer.


Clave

La comprensión de listas es una sintaxis para crear listas en una sola línea: [expresión for variable in iterable if condición]. Para el filtrado, se coloca if al final; para la transformación condicional, se coloca if-else al principio. {} + key: value resulta en un diccionario; {} + solo el valor resulta en una comprensión de conjuntos. Si no puede incluirlo todo en una sola línea, use un bucle for — la legibilidad es lo primero.

💬 Preguntas y comentarios

0 comentarios

Puedes publicar sin iniciar sesión. Los comentarios de invitados no pueden editarse ni eliminarse después.

0/2000

Cargando...