Existen joyas de la programación que suelen ser subestimadas o echadas en el olvido. Este es el caso de filter(), una función que puede convertirse en gran aliada si requieres trabajar con datos y no sabes qué incluir y qué descartar. Hoy te enseñaremos cómo es filter(), para qué se usa y por qué es tan subestimada.
¿Qué es filter() en Python?
La función filter() en Python te permite seleccionar elementos específicos de un iterable (como listas, tuplas o conjuntos) en función de un criterio que definas. Para ser específicos, actúa como un filtro literal, reteniendo solo los elementos que cumplen con una condición.
Su sintaxis es así:
filter(función, iterable)
- función: Una función que define la condición para filtrar. Debe devolver True para los elementos que quieres conservar y False para los que deseas excluir.
- iterable: El conjunto de datos que será filtrado, como una lista o una tupla.
El resultado es un objeto filter que puedes convertir en una lista, tupla o cualquier otro iterable.
Si aun no te queda claro, seguro con este ejemplo será más entendible: digamos que que tienes una lista de edades y solo quieres conservar aquellas mayores o iguales a 18 años:
edades = [5, 12, 17, 18, 24, 32]
def es_adulto(edad):
return edad >= 18
adultos = filter(es_adulto, edades)
print(list(adultos)) # Salida: [18, 24, 32]
En este ejemplo, filter() aplica la función es_adulto a cada elemento de la lista y devuelve únicamente las edades que cumplen la condición.
¿Por qué es filter() tan poderosa (y subestimada)?
🔴 ¿Quieres Aprender a Programar con Python? 🔴
Descubre el Full Stack Jr. Bootcamp - Aprende a Programar desde Cero de KeepCoding. La formación más completa del mercado y con empleabilidad garantizada
👉 Prueba gratis el Bootcamp Aprende a Programar desde Cero por una semanaAunque puedes lograr resultados similares con un bucle for o una comprensión de listas, filter() es en ocasiones mucho mejor por varias razones:
- Código más limpio: En lugar de escribir un bloque de bucles y condicionales, puedes condensar la lógica en una sola línea.
- Eficiencia: filter() genera los resultados en tiempo real, lo que significa que no ocupa espacio extra en memoria al generar una nueva lista completa.
- Legibilidad: Especialmente útil cuando trabajas con datos grandes o condiciones complejas, haciendo que tu código sea más fácil de entender.
¿Para qué se usa filter()?
Entre otras cosas, puedes usar filter() para:
- Filtrar datos numéricos: Filtra solo los números pares de una lista:
numeros = [1, 2, 3, 4, 5, 6, 7, 8, 9]
def es_par(num):
return num % 2 == 0
pares = filter(es_par, numeros)
print(list(pares)) # Salida: [2, 4, 6, 8]
- Filtrar cadenas: Selecciona palabras que contienen más de 4 letras.
palabras = ["sol", "luna", "estrellas", "cielo", "mar"]
def es_larga(palabra):
return len(palabra) > 4
largas = filter(es_larga, palabras)
print(list(largas)) # Salida: ['estrellas']
- Combinando filter() con lambda: El uso de funciones lambda con filter() hace que tu código sea aún más compacto:
numeros = [1, 2, 3, 4, 5, 6, 7, 8, 9]
pares = filter(lambda num: num % 2 == 0, numeros)
print(list(pares)) # Salida: [2, 4, 6, 8]
Este enfoque elimina la necesidad de definir funciones separadas, ideal para tareas rápidas.
Filter() vs bucles tradicionales: ¿cuál es mejor?
Un bucle for también puede filtrar datos, pero el resultado es más largo y menos eficiente. Considera este ejemplo:
numeros = [1, 2, 3, 4, 5, 6, 7, 8, 9]
pares = []
for num in numeros:
if num % 2 == 0:
pares.append(num)
print(pares) # Salida: [2, 4, 6, 8]
Aunque funcional, este enfoque requiere más líneas y utiliza memoria adicional para almacenar los resultados. Con filter(), el mismo resultado se logra en una sola línea y con mejor optimización.
En Keepcoding te enseñamos variedad de temáticas para que abordes la programación como se debe, con todas las herramientas necesarias para enfrentarte a un mundo laboral en constante crecimiento. Por eso te ofrecemos el bootcamp en programación desde cero, que te ayudará a transformar tu vida en poco tiempo. ¡Únete a la mejor comunidad y da el primer paso ahora!