Domina cómo usar filter en Python para limpiar datos de forma clara y eficiente. Verás primero un filtrado clásico con for y operador módulo, luego la versión con filter que retorna un iterador, y finalmente la integración en un sistema de noticias para obtener artículos por fuente con una lambda y comparación sin importar mayúsculas.
¿Cómo filtrar números pares con un for y operador módulo?
Empezamos con una lista del 1 al 10 y un filtrado manual. La clave es el operador módulo: si num % 2 == 0, el número es par. Así construimos una nueva lista con los pares.
# filter_pairs.pynumbers =list(range(1,11))pairs =[]for num in numbers:if num %2==0:# operador módulo con 2 pairs.append(num)print(numbers)print(pairs)
Uso de operador módulo para evaluar pares.
Construcción de una lista a partir de otra.
Impresión de lista original y lista filtrada.
¿Qué hace filter en Python y por qué retorna un iterador?
La función filter recibe dos argumentos: una función que retorna booleano y un iterable (por ejemplo, list, set o las llaves de un diccionario). Al aplicarla, devuelve un iterador que se evalúa bajo demanda, útil con muchos datos porque solo “se calcula” al consumirlo.
defis_pair(n:int)->bool:return n %2==0pairs_iter =filter(is_pair, numbers)# retorna un iteradorfor pair in pairs_iter:print(pair)
Si se necesita la colección completa, conviene convertir el iterador a list.
filter requiere función que retorne True/False y un iterable.
Retorna un iterador, no una lista directa.
Conversión con list(...) cuando se desea materializar resultados.
Evaluación perezosa: solo se procesa cuando se consume, ideal si luego usarás pocos elementos.
¿Cómo integrar filter para seleccionar artículos por fuente en un sistema de noticias?
Se implementa una utilidad getarticles_by_source que recibe una lista de diccionarios y un str con la fuente. Se usa filter con lambda para comparar el nombre de la fuente en cada artículo y se convierte el resultado a lista para mantener el typing esperado.
Uso de lambda como función anónima para el criterio de filtrado.
Acceso a campos anidados: article['source']['name'].
Comparación case-insensitive con .lower() en ambos lados para evitar discrepancias de mayúsculas/minúsculas.
Conversión a list para cumplir con el tipo de retorno y evitar errores de typing.
¿Cómo depurar la fuente correcta disponible?
Si el resultado es una lista vacía, imprime las fuentes únicas para verificar nombres exactos (por ejemplo, diferencias entre “GitHub” y “github.com”). Un “set comprimido” ayuda a inspeccionar rápidamente.
sources ={article["source"]["name"]for article in articles}print(sources)
Inspección rápida con comprensión de conjuntos.
Verificación de valores reales presentes en source.name.
Ajuste del criterio: coincidencia exacta o normalizada con .lower().
¿Cómo presentar los resultados sin for condicionales adicionales?
Tras filtrar, se pueden imprimir campos específicos como el título.
github_articles = getarticles_by_source(articles,"github.com")for a in github_articles:print(a["title"])# mostrar solo el título
Mantén el filtrado en una sola expresión con filter.
Evita bucles condicionales redundantes que consumen CPU o memoria.
Muestra la información clave que necesitas, como el title.
¿Tienes otra fuente que te gustaría filtrar o un criterio más complejo con lambda? Comparte tu caso y lo resolvemos juntos.