Regístrate para acceder a más de 15 cursos gratuitos de programación con un simulador

Comprensiones Python: Funciones

La mayoría de las operaciones sobre colecciones en Python combinan filtrado filter() y transformación map().

⏬ Ejemplo usando filter() y map() para obtener nombres de usuarios mayores de 10 años:

users = [
  {'name': 'Carlos', 'age': 19},
  {'name': 'Daniel', 'age': 1},
  {'name': 'Valeria', 'age': 4},
  {'name': 'Mateo', 'age': 16},
]

filtered_users = filter(lambda user: user['age'] > 10, users)
names = map(lambda user: user['name'], filtered_users)
list(names)  # ['Carlos', 'Mateo']

Expresiones de Lista

Una alternativa más compacta y legible es usar expresiones de lista (list comprehensions):

names = [user['name'] for user in users if user['age'] > 10]
print(names)  # ['Carlos', 'Mateo']

Estructura de una expresiones de lista:

[EXPR for VAR in SECUENCIA if CONDICIÓN]
  • EXPR – Expresión aplicada a cada elemento.
  • VAR – Variable que representa cada elemento de la secuencia.
  • SECUENCIA – Lista o iterador a recorrer.
  • CONDICIÓN – (Opcional) Filtra elementos antes de aplicar la transformación.

Ejemplo con descomposición de tuplas:

pairs = [(1, 2), (4, 4), (5, 7), (0, 0)]
indices = [i for i, (x, y) in enumerate(pairs) if x == y]
print(indices)  # [1, 3]

Ventajas de las expresiones de lista

✔ Más conciso y legible.

✔ Evita crear variables temporales innecesarias.

✔ Se puede anidar para procesar estructuras más complejas.

Expresiones de Conjunto

Expresiones de Conjunto (set comprehensions) funcionan similar a list comprehensions, pero creando conjuntos en vez de listas:

squares = {x * x for x in range(10)}
print(squares)  # {0, 1, 4, 9, 16, 25, 36, 49, 64, 81}

En este caso, se crea un conjunto con los cuadrados de los números del 0 al 9. A diferencia de las listas, los conjuntos no permiten elementos duplicados, lo que puede ser útil para filtrar valores repetidos automáticamente.

Expresiones de Diccionario

También podemos construir diccionarios de manera compacta con Expresiones de Diccionario (Dict Comprehensions):

char_positions = {char: pos for pos, char in enumerate("Hola Mundo")}
print(char_positions)  
# {'H': 0, 'o': 1, 'l': 2, 'a': 3, ' ': 4, 'M': 5, 'u': 6, 'n': 7, 'd': 8}

En este ejemplo, creamos un diccionario donde cada carácter de la cadena "Hola Mundo" se asocia con su posición en la cadena.

Expresiones Generadoras

A diferencia de las list comprehensions, que crean una lista completa en memoria, las expresiones generadoras (generator expressions) evalúan los elementos de manera perezosa (lazy evaluation). Esto significa que los valores se calculan solo cuando se necesitan, lo que puede ahorrar memoria en estructuras grandes.

gen = (x * x for x in range(10))
print(gen)  # <generator object <genexpr> at 0x...>

Para obtener los valores de un generador, podemos usar un bucle for o la función next():

print(next(gen)) # 0 
print(next(gen)) # 1 
print(next(gen)) # 4

Los generadores son especialmente útiles cuando trabajamos con grandes volúmenes de datos y queremos optimizar el uso de memoria.

Ventajas de los Generadores

✔ Menos uso de memoria, ideal para grandes volúmenes de datos.

✔ Se procesan elemento por elemento, sin almacenar toda la secuencia en memoria.

Diferencia clave: Mientras que list comprehensions generan una lista completa, los generadores son evaluados perezosamente (lazy evaluation). Ejemplo con any() (detectar si algún número es mayor a 100)

result = any(x > 100 for x in range(1000000))
print(result)  # True

Sin generadores: Se construiría un array de 1 millón de elementos, ocupando más memoria.

¿Cuándo Usar Cada Enfoque?

Método Uso recomendado
map() y filter() Cuando la función ya existe y queremos aplicarla sin escribir una nueva.
Expresiones de Lista Para combinar map() y filter() en una sola expresión más clara.
Expresiones de Conjunto Cuando necesitamos colecciones únicas sin elementos repetidos.
Expresiones de Diccionario Para transformar datos en un diccionario de manera eficiente.
Generador de Expresiones Para iteraciones perezosas que evitan el uso innecesario de memoria.

Resumen

  • List comprehensions hacen el código más limpio y legible.

  • Set y dict comprehensions permiten transformar datos de manera eficiente.

  • Generadores son ideales cuando no necesitamos almacenar la secuencia completa.

Usa la herramienta correcta según el caso para escribir código más eficiente.


Materiales adicionales

  1. List comprehensions
  2. Dict comprehensions
  3. Expresiones generadoras

Para acceder completo a curso necesitas un plan básico

El plan básico te dará acceso completo a todos los cursos, ejercicios y lecciones de Códica, proyectos y acceso de por vida a la teoría de las lecciones completadas. La suscripción se puede cancelar en cualquier momento.

Obtener acceso
130
cursos
1000
ejercicios
2000+
horas de teoría
3200
test

Obtén acceso

Cursos de programación para principiantes y desarrolladores experimentados. Comienza tu aprendizaje de forma gratuita

  • 130 cursos, 2000+ horas de teoría
  • 1000 ejercicios prácticos en el navegador
  • 360 000 estudiantes
Al enviar el formulario, aceptas el «Política de privacidad» y los términos de la «Oferta», y también aceptas los «Términos y condiciones de uso»

Nuestros graduados trabajan en empresas como:

Bookmate
Health Samurai
Dualboot
ABBYY