Cómo utilizar la función filter() en Python

Aprenda a utilizar la función filter() de Python para extraer elementos de colecciones. Compare el filtro con listas por comprensión y devoluciones de llamadas lambda.

Pruebe esta solución en el Editor

Descripción general

El filtrado de datos es una tarea central en la programación de aplicaciones. A menudo necesitarás buscar en una lista y extraer elementos que cumplan criterios específicos, como extraer usuarios activos de una base de datos de perfiles o filtrar números negativos de los registros de sensores. Python proporciona una herramienta funcional incorporada llamada `filtro()` para este propósito.

La función `filtro(función, iterable)` toma una función de filtrado y un iterable como argumentos. El argumento de la función debe devolver un valor booleano ("Verdadero" o "Falso") para cada elemento. La función `filter()` evalúa cada elemento, reteniendo solo aquellos que se evalúan como `True` y devuelve un objeto iterador (un objeto `filter`) que contiene los resultados.

Al igual que `map()`, `filter()` evalúa elementos de forma perezosa. Si necesita una lista estándar de inmediato, emita la salida usando el constructor `list()`: `list(filter(func, data))`. Si pasa `Ninguno` como parámetro de función (por ejemplo, `filtro(Ninguno, datos)`), Python filtrará automáticamente todos los elementos que sean falsos, lo cual es una excelente abreviatura para borrar valores vacíos.

Código y salida de ejecución

Este script demuestra cómo filtrar matrices numéricas, extraer elementos de diccionario y descartar cadenas vacías falsas con filter().

filter_function.py
Pruébelo en el editor
numbers = [-5, -2, 0, 3, 8, -1]

# 1. Filter positive numbers using a lambda function
positives = list(filter(lambda x: x > 0, numbers))
print("Positives only:", positives)

# 2. Filter list of strings by character length
words = ["cat", "elephant", "dog", "giraffe"]
long_words = list(filter(lambda w: len(w) > 4, words))
print("Words longer than 4 chars:", long_words)

# 3. Shorthand: Remove all falsy values from a list by passing None
mixed_data = ["hello", "", "world", None, False, "active"]
clean_data = list(filter(None, mixed_data))
print("Falsy values removed:", clean_data)
Salida terminal
Positives only: [3, 8]
Words longer than 4 chars: ['elephant', 'giraffe']
Falsy values removed: ['hello', 'world', 'active']

Implementación paso a paso

  • Defina una función que acepte un elemento y devuelva un valor booleano que represente los criterios del filtro.
  • Llame al filtro (función, iterable) para crear un iterador diferido de coincidencias.
  • Transmita el objeto de filtro resultante a una lista usando list(filter(...)) si necesita manipular los registros.
  • Pase Ninguno como argumento de la función para filtrar todos los valores falsos (como Ninguno, 0 y cadenas vacías).

Preguntas frecuentes

¿Qué sucede si la función pasada a filter() no devuelve un valor booleano?

Python evalúa la veracidad del valor devuelto. Si el valor se evalúa como Verdadero en un contexto booleano, el elemento se conserva.

¿Debo usar filter() o una lista por comprensión?

A menudo se prefiere una lista de comprensión con una condición if (por ejemplo, [x para x en la lista si condición]) para facilitar la lectura, pero filter() es limpio y tiene un alto rendimiento, especialmente cuando se utilizan funciones integradas existentes.

Temas relacionados

Recursos recomendados de Python

Amplíe sus conocimientos con tutoriales interactivos relacionados, hojas de trucos y comparaciones de códigos.