- Transformación eficiente de datos con map()
- Ventajas de map() sobre for
- Implementando nuestra propia función map()
- Resumen
Imagina que tenemos una lista de usuarios y queremos extraer solo sus nombres:
users = [
{ 'name': 'Juan', 'age': 19 },
{ 'name': 'Sofía', 'age': 1 },
{ 'name': 'Carlos', 'age': 4 },
{ 'name': 'Mateo', 'age': 16 },
]
result = []
for user in users:
result.append(user['name'])
print(result) # => ['Juan', 'Sofía', 'Carlos', 'Mateo']
Ahora, si queremos extraer las edades, repetimos el mismo código:
result = []
for user in users:
result.append(user['age'])
print(result) # => [19, 1, 4, 16]
Patrón repetitivo:
- Se recorre la lista con
for. - Se extrae un valor específico.
- Se almacena en una nueva lista.
💡 Podemos simplificar esto usando map(), una función de orden superior que transforma colecciones sin necesidad de escribir ciclos manualmente.
Transformación eficiente de datos con map()
map() aplica una función a cada elemento de una colección y devuelve un iterador con los valores transformados.
names = map(lambda user: user['name'], users)
list(names) # => ['Juan', 'Sofía', 'Carlos', 'Mateo']
map() recibe:
- Una función que define la transformación.
- La colección sobre la cual se aplica.
- Retorna un iterador, no una lista.
Podemos convertirlo en una lista con list():
ages = map(lambda user: user['age'], users)
list(ages) # => [19, 1, 4, 16]
O definir el callback por separado:
obtener_edad = lambda user: user['age']
list(map(obtener_edad, users)) # => [19, 1, 4, 16]
Ventajas de map() sobre for
✅ Código más corto y limpio.
✅ Evita lógica repetitiva (el for se maneja internamente).
✅ Usa evaluación perezosa, procesando elementos bajo demanda.
⏬ Ejemplo de transformación numérica con map():
numeros = [5, 2, 3]
# Elevar al cuadrado cada número
cuadrados = map(lambda num: num ** 2, numeros)
list(cuadrados) # => [25, 4, 9]
# Sumar 3 a cada número
mas_tres = map(lambda num: num + 3, numeros)
list(mas_tres) # => [8, 5, 6]
Transforma listas sin necesidad de ciclos explícitos.
Implementando nuestra propia función map()
Podemos construir una versión simplificada de map() usando generadores:
def mi_map(callback, coleccion):
for item in coleccion:
yield callback(item) # Genera el nuevo valor
numeros = [5, 2, 3]
cuadrados = mi_map(lambda num: num ** 2, numeros)
list(cuadrados) # => [25, 4, 9]
mi_map() no sabe qué hacer con cada elemento, solo aplica la función recibida. Usa yield, lo que la convierte en una función perezosa (no almacena los resultados en memoria).
Resumen
map()permite transformar colecciones sin escribir ciclos manuales.- Es más eficiente, evita repeticiones y usa evaluación perezosa.
- Puede combinarse con
list(),set()otuple()para obtener estructuras finales. - Facilita el código funcional, enfocándose en la transformación y no en el cómo.
Este enfoque se usa en procesamiento de datos, transformación de APIs y muchas aplicaciones prácticas.
Materiales adicionales
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.