sorted(), filter(), map()

 ¡Excelente! Vamos a explorar estas tres funciones fundamentales en Python. Son como tres herramientas especializadas en tu caja de herramientas de programación.

Analogía: La Fábrica de Juguetes

Imagina una fábrica de juguetes:

  • sorted() → Como el clasificador: organiza los juguetes por tamaño, color o tipo

  • filter() → Como el inspector de calidad: solo deja pasar los juguetes que cumplen ciertos requisitos

  • map() → Como la máquina de pintar: transforma cada juguete (lo pinta de otro color, le añade detalles)


📊 sorted() - El Organizador

Función: Ordena elementos de una lista

Sintaxis:

python
sorted(iterable, key=None, reverse=False)

Ejemplo 1: Ordenar números

python
numeros = [5, 2, 8, 1, 9]
ordenados = sorted(numeros)
print(ordenados)  # [1, 2, 5, 8, 9]

# En orden descendente
descendente = sorted(numeros, reverse=True)
print(descendente)  # [9, 8, 5, 2, 1]

Ejemplo 2: Ordenar textos

python
nombres = ["Carlos", "Ana", "Beatriz", "David"]
ordenados = sorted(nombres)
print(ordenados)  # ['Ana', 'Beatriz', 'Carlos', 'David']

Ejemplo 3: Ordenar con criterio personalizado (usando key)

python
estudiantes = [
    ("Ana", 15),
    ("Carlos", 12), 
    ("Beatriz", 14)
]

# Ordenar por edad (segundo elemento)
por_edad = sorted(estudiantes, key=lambda x: x[1])
print(por_edad)  # [('Carlos', 12), ('Beatriz', 14), ('Ana', 15)]

# Ordenar por longitud del nombre
por_longitud = sorted(estudiantes, key=lambda x: len(x[0]))
print(por_longitud)  # [('Ana', 15), ('Carlos', 12), ('Beatriz', 14)]

Ejemplo 4: Ordenar diccionarios

python
productos = [
    {"nombre": "Laptop", "precio": 800},
    {"nombre": "Mouse", "precio": 25},
    {"nombre": "Teclado", "precio": 75}
]

# Ordenar por precio
por_precio = sorted(productos, key=lambda x: x["precio"])
print(por_precio)
# [{'nombre': 'Mouse', 'precio': 25}, {'nombre': 'Teclado', 'precio': 75}, {'nombre': 'Laptop', 'precio': 800}]

🔍 filter() - El Filtrador

Función: Filtra elementos que cumplan una condición

Sintaxis:

python
filter(funcion, iterable)

Ejemplo 1: Filtrar números pares

python
numeros = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

# Usando función normal
def es_par(n):
    return n % 2 == 0

pares = list(filter(es_par, numeros))
print(pares)  # [2, 4, 6, 8, 10]

# Usando lambda (más común)
pares_lambda = list(filter(lambda x: x % 2 == 0, numeros))
print(pares_lambda)  # [2, 4, 6, 8, 10]

Ejemplo 2: Filtrar textos

python
nombres = ["Ana", "Carlos", "Beatriz", "David", "Eva"]

# Nombres con más de 4 letras
largos = list(filter(lambda nombre: len(nombre) > 4, nombres))
print(largos)  # ['Carlos', 'Beatriz', 'David']

# Nombres que empiezan con vocal
vocales = list(filter(lambda nombre: nombre[0].lower() in "aeiou", nombres))
print(vocales)  # ['Ana', 'Eva']

Ejemplo 3: Filtrar elementos complejos

python
estudiantes = [
    {"nombre": "Ana", "nota": 85},
    {"nombre": "Carlos", "nota": 45},
    {"nombre": "Beatriz", "nota": 92},
    {"nombre": "David", "nota": 78}
]

# Estudiantes aprobados (nota >= 70)
aprobados = list(filter(lambda estudiante: estudiante["nota"] >= 70, estudiantes))
print(aprobados)
# [{'nombre': 'Ana', 'nota': 85}, {'nombre': 'Beatriz', 'nota': 92}, {'nombre': 'David', 'nota': 78}]

🔄 map() - El Transformador

Función: Aplica una función a cada elemento

Sintaxis:

python
map(funcion, iterable)

Ejemplo 1: Transformar números

python
numeros = [1, 2, 3, 4, 5]

# Elevar al cuadrado
cuadrados = list(map(lambda x: x ** 2, numeros))
print(cuadrados)  # [1, 4, 9, 16, 25]

# Convertir a string
textos = list(map(lambda x: f"Número: {x}", numeros))
print(textos)  # ['Número: 1', 'Número: 2', 'Número: 3', 'Número: 4', 'Número: 5']

Ejemplo 2: Transformar textos

python
nombres = ["ana", "carlos", "beatriz"]

# Capitalizar nombres
capitalizados = list(map(lambda x: x.capitalize(), nombres))
print(capitalizados)  # ['Ana', 'Carlos', 'Beatriz']

# Convertir a mayúsculas
mayusculas = list(map(str.upper, nombres))
print(mayusculas)  # ['ANA', 'CARLOS', 'BEATRIZ']

Ejemplo 3: Transformar elementos complejos

python
productos = [
    {"nombre": "Laptop", "precio": 800},
    {"nombre": "Mouse", "precio": 25},
    {"nombre": "Teclado", "precio": 75}
]

# Aplicar 20% de descuento
con_descuento = list(map(lambda p: {
    "nombre": p["nombre"],
    "precio": p["precio"] * 0.8
}, productos))

print(con_descuento)
# [{'nombre': 'Laptop', 'precio': 640.0}, {'nombre': 'Mouse', 'precio': 20.0}, ...]

🎯 Ejemplo Práctico Combinado

Vamos a procesar una lista de estudiantes usando las tres funciones:

python
estudiantes = [
    {"nombre": "Ana", "edad": 22, "calificacion": 85},
    {"nombre": "Carlos", "edad": 19, "calificacion": 92},
    {"nombre": "Beatriz", "edad": 25, "calificacion": 78},
    {"nombre": "David", "edad": 20, "calificacion": 65},
    {"nombre": "Eva", "edad": 23, "calificacion": 88}
]

# 1. FILTER: Solo estudiantes mayores de 21 años
mayores = list(filter(lambda e: e["edad"] > 21, estudiantes))
print("Mayores de 21:", mayores)

# 2. MAP: Agregar estado de aprobación (>=70 aprueba)
con_estado = list(map(lambda e: {
    **e,
    "estado": "Aprobado" if e["calificacion"] >= 70 else "Reprobado"
}, estudiantes))
print("Con estado:", con_estado)

# 3. SORTED: Ordenar por calificación (mejor a peor)
por_calificacion = sorted(estudiantes, key=lambda e: e["calificacion"], reverse=True)
print("Por calificación:", por_calificacion)

# 4. COMBINACIÓN: Filtrar aprobados y ordenar por nombre
aprobados_ordenados = sorted(
    filter(lambda e: e["calificacion"] >= 70, estudiantes),
    key=lambda e: e["nombre"]
)
print("Aprobados ordenados:", aprobados_ordenados)

📝 Resumen Comparativo

FunciónQué haceDevuelveEjemplo
sorted()Ordena elementosNueva lista ordenadasorted([3,1,2]) → [1,2,3]
filter()Filtra elementos que cumplen condiciónIterador con elementos que pasan el filtrofilter(es_par, nums) → [2,4,6]
map()Transforma cada elementoIterador con elementos transformadosmap(cuadrado, nums) → [1,4,9]

Puntos Clave:

  • Todas devuelven nuevos objetos (no modifican el original)

  • Trabajan con cualquier iterable (listas, tuplas, etc.)

  • Se usan mucho con funciones lambda

  • filter() y map() devuelven iteradores - por eso usamos list() para convertirlos

¿Cuándo usar cada una?

  • sorted(): Cuando necesitas ordenar datos

  • filter(): Cuando necesitas eliminar elementos que no cumplen criterios

  • map(): Cuando necesitas transformar/modificar cada elemento

Comentarios

Entradas populares de este blog

¿Qué es un Closure?

Calculadora de edad

Funciones en Python: con y sin paréntesis