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 tipofilter()→ Como el inspector de calidad: solo deja pasar los juguetes que cumplen ciertos requisitosmap()→ 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:
sorted(iterable, key=None, reverse=False)
Ejemplo 1: Ordenar números
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
nombres = ["Carlos", "Ana", "Beatriz", "David"] ordenados = sorted(nombres) print(ordenados) # ['Ana', 'Beatriz', 'Carlos', 'David']
Ejemplo 3: Ordenar con criterio personalizado (usando key)
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
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:
filter(funcion, iterable)
Ejemplo 1: Filtrar números pares
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
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
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:
map(funcion, iterable)
Ejemplo 1: Transformar números
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
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
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:
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ón | Qué hace | Devuelve | Ejemplo |
|---|---|---|---|
sorted() | Ordena elementos | Nueva lista ordenada | sorted([3,1,2]) → [1,2,3] |
filter() | Filtra elementos que cumplen condición | Iterador con elementos que pasan el filtro | filter(es_par, nums) → [2,4,6] |
map() | Transforma cada elemento | Iterador con elementos transformados | map(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()ymap()devuelven iteradores - por eso usamoslist()para convertirlos
¿Cuándo usar cada una?
sorted(): Cuando necesitas ordenar datosfilter(): Cuando necesitas eliminar elementos que no cumplen criteriosmap(): Cuando necesitas transformar/modificar cada elemento
Comentarios
Publicar un comentario