Saltar al contenido principal

Filtro Python(): Guarda lo que necesites

Aprende a utilizar la función filter() de Python para extraer elementos de listas u otros iterables. Comprende las principales diferencias entre el filtro y otras herramientas similares de Python.
Actualizado 27 jun 2025  · 7 min de lectura

Filtrar es una de las tareas más comunes en Python, por eso Python te lo pone fácil. Una de las formas más sencillas de filtrar datos es con la función incorporada filter(). Como su nombre deja claro, filter() te permite sacar sólo los elementos que cumplen una determinada condición (o condiciones).

Esta guía te explica cómo funciona, cuándo utilizarla y cómo se compara con otras herramientas de filtrado. ¡Léelo!

Qué hace filter() de Python

filter() te permite extraer elementos de una lista, tupla o cualquier iterable, pero sólo si superan tu prueba. Proporcionas una función (a veces he visto que se llama predicado) que toma cada elemento y devuelve True o False. Si la prueba pasa (léase: si tu función devuelve True) filter() se la queda. De lo contrario, omite el elemento. Esto se explica por sí mismo, así que continuemos.

Sintaxis de Python filter()

Éste es el formato:

filter(function, iterable)
  • function: Especifica la prueba que quieres aplicar a cada elemento. Debe tomar un argumento y devolver True o False.

  • iterable: Proporciona una lista, tupla, cadena o cualquier objeto sobre el que puedas hacer un bucle.

Cuando llamas a filter(), devuelve un objeto filtro especial, no una lista o tupla directamente. Para trabajar realmente con los resultados filtrados, normalmente envolverás la salida en una lista o tupla. Esta elección de diseño mantiene la eficiencia de filter(), pero es algo que debes tener en cuenta cuando escribas tu código.

Ejemplos de Python filter()

Practiquemos un poco.

Python filter() con una función personalizada

Utilicemos filter() con una función que escribamos nosotros mismos.

Supón que quieres conservar sólo los números pares de una lista:

def is_even(num):
    return num % 2 == 0

numbers = [1, 2, 3, 4, 5, 6]
result = filter(is_even, numbers)
print(list(result))

Se imprimirá:

[2, 4, 6]

Observa cómo is_even comprueba si un número es divisible por 2. filter() utiliza nuestra función personalizada para comprobar cada elemento y quedarse con los que superan nuestra prueba.

Python filter() con funciones lambda

Por supuesto, no todos los filtros necesitan una definición de función completa. A veces, tu regla de filtrado es tan sencilla o tan específica de un punto que definir una función con nombre es demasiado trabajo.

Aquí tienes el mismo ejemplo de número par, pero utilizando una lambda para una prueba concisa e in situ:

numbers = [1, 2, 3, 4, 5, 6] 
result = filter(lambda x: x % 2 == 0, numbers) 
print(list(result))

Obtendrás el mismo resultado que antes.

Utilizar lambda con filter() es especialmente habitual cuando quieres mantener tu código corto y centrado. Es ideal para tareas de filtrado puntuales, ya que te permite expresar tu regla justo donde la necesitas.

Python filter() con None como función

A veces, quieres filter() valores vacíos o falsos. Cosas como 0, cadenas vacías, None, o False, y queremos hacerlo sin escribir una función personalizada.

Python tiene un truco para esto: Si estableces el argumento de la función en filter() como None, filter() eliminará automáticamente todos los elementos que Python considere False.

He aquí un ejemplo:

items = [0, 1, '', 'hello', [], [2, 3], None, False, True] 
result = filter(None, items) 
print(list(result))

Se imprimirá:

[1, 'hello', [2, 3], True]

Filtrar datos de texto

Apliquemos ahora filter() a un problema práctico y cotidiano. Supón que tienes una lista de palabras y sólo quieres las que empiezan por "a". Este tipo de filtrado selectivo se da siempre que se procesa texto.

words = ['apple', 'banana', 'apricot', 'cherry', 'avocado'] 
result = filter(lambda word: word.startswith('a'), words) 
print(list(result))

Conseguirás:

['apple', 'apricot', 'avocado']

Filtrar con múltiples condiciones

A veces, tus criterios de filtrado son más complejos. ¿Y si necesitas artículos que cumplan varias condiciones? He aquí cómo puedes hacerlo utilizando una lambda. En este ejemplo, buscamos números pares y mayores que 10.

numbers = [4, 10, 12, 15, 20, 23, 28] 
result = filter(lambda x: x % 2 == 0 and x > 10, numbers) 
print(list(result))

Esto imprime:

[12, 20, 28]

(Si tuviera aún más condiciones, me plantearía cambiar de una lambda a una función con nombre para mayor claridad).

filtro() vs. Comprensión de listas

Las comprensiones de listas son otra forma popular de seleccionar elementos. Ambos enfoques te permiten filtrar datos, pero cada uno tiene su propio estilo.

Aquí tienes de nuevo el ejemplo del número par, esta vez utilizando una comprensión de lista:

numbers = [1, 2, 3, 4, 5, 6] 
result = [x for x in numbers if x % 2 == 0] 
print(result)
[2, 4, 6]

Tanto filter() como las comprensiones de listas harán el trabajo. Las comprensiones de listas suelen ser más fáciles de leer para los filtros directos, sobre todo cuando la regla es corta y sencilla.

Por otra parte, filter() funciona bien cuando ya estás trabajando con funciones, o cuando quieres encadenar varios pasos de procesamiento.

Usos más avanzados

Intentemos encontrar algunos casos más interesantes:

filter() con otros iterables

Al igual que hicimos con las listas, filter() también funciona con cualquier iterable, como tuplas, conjuntos... incluso expresiones generadoras. Es bueno saberlo porque tus datos no siempre estarán en forma de lista.

He aquí cómo puedes filtrar una tupla:

numbers = (10, 15, 20, 25, 30) 
result = filter(lambda x: x > 20, numbers) 
print(tuple(result))

Se imprimirá:

(25, 30)

Sólo recuerda convertir el objeto filtro al tipo que desees (lista, tupla, etc.) cuando necesites utilizar los resultados directamente.

Ahora, también he mencionado los generadores, así que, para ser exhaustivo, también mostraré un ejemplo de filtrado con generadores:

numbers = (x for x in range(10))
result = filter(lambda x: x % 2 == 0, numbers)
print(list(result))

Se trata de un generador porque esta línea: numbers = (x for x in range(10)) crea un objeto generador. (Es perezoso y no genera todos los valores a la vez).

La línea final: print(list(result)) fuerza la evaluación convirtiendo el objeto filtro perezoso en una lista.

Combinar filter() con map()

¿Y si quieres tanto filtrar como transformar tus datos, como, para nuestro siguiente ejemplo, elevar al cuadrado sólo los números pares de una lista?

Python te lo pone fácil permitiéndote combinar filter() y map(). Primero, filter() elige los elementos que quieres, y luego map() aplica otra función a cada uno de ellos.

Esto es lo que ocurre en la práctica:

numbers = [1, 2, 3, 4, 5, 6] 
evens = filter(lambda x: x % 2 == 0, numbers) 
squared = map(lambda x: x ** 2, evens) 
print(list(squared))

Esto imprime:

[4, 16, 36]

Encadenando filter() y map(), puedes construir conductos de datos claros y legibles, seleccionando primero los elementos que te interesan y transformándolos después según sea necesario. Habrá oportunidades de utilizar este patrón en tu propio trabajo.

Cosas a tener en cuenta

Por muy útil que sea filter(), la gente comete algunos errores:

  • filter() devuelve un objeto filtro, no una lista. Esto puede hacerte tropezar si esperas ver resultados enseguida. Envuélvelo siempre en una lista (o tupla) si necesitas ver o reutilizar los resultados.

  • filter() sólo funciona con un iterable cada vez. Si quieres filtrar basándote en varias listas, tendrás que comprimirlas o utilizar otro método.

  • filter() es perezoso. En realidad, no procesa los datos hasta que los conviertes en una lista, tupla o bucle sobre ellos. Ten en cuenta este comportamiento cuando depures.

Conclusión

Como has visto, la función filter() de Python te ofrece una forma rápida de limpiar los datos sacando sólo lo que importa. filter() te ayuda si estás escribiendo una lambda única o introduciendo una función con nombre. 

Si no tienes claro cómo utilizar filter(), o si crees que ha sido lo suficientemente sencillo y quieres seguir aprendiendo, tenemos excelentes recursos para ayudarte. Te recomiendo nuestro programa Fundamentos de programación en Python


Josef Waples's photo
Author
Josef Waples

Preguntas frecuentes sobre el filtro Python

¿Qué hace la función filter() de Python?

La función filter() toma una función y un iterable y devuelve un nuevo iterable con sólo los elementos que superan una prueba. La función de prueba debe devolver True para los elementos que quieras conservar y False para los que quieras omitir.

¿Por qué tengo que envolver el resultado de filter() en list() o tuple()?

filter() devuelve un objeto filtro, que es un iterador. Para ver o reutilizar los resultados filtrados, normalmente los convertirás en una lista o tupla utilizando list() o tuple(). Este paso es esencial para imprimir, depurar o pasar el resultado a otras funciones.

¿Puedo utilizar filter() sin escribir una función personalizada?

Sí. Puedes utilizar una función lambda para pruebas cortas y puntuales, o pasar None como argumento de la función para eliminar automáticamente todos los valores "falsos" como 0, '', None y False.

¿Cómo se compara filter() con las comprensiones de listas?

Tanto filter() como las comprensiones de listas te permiten filtrar datos, pero las comprensiones de listas suelen ser más legibles para condiciones sencillas. filter() es útil cuando se reutiliza la lógica mediante funciones o se encadena con herramientas como map().

¿Puedo aplicar varias condiciones con filter()?

Absolutamente. Puedes combinar varias condiciones utilizando operadores lógicos dentro de tu función de prueba o lambda. Para la lógica compleja, a menudo es mejor utilizar una función con nombre para mantener el código legible.

Temas

Aprende Python con DataCamp

Curso

Introduction to Python

4 h
6.3M
Master the basics of data analysis with Python in just four hours. This online course will introduce the Python interface and explore popular packages.
Ver detallesRight Arrow
Comienza el curso
Ver másRight Arrow
Relacionado

Tutorial

Tutorial de comprensión del diccionario Python

¡Aprende todo sobre la comprensión de diccionarios en Python: cómo puedes utilizarla para crear diccionarios, para sustituir los for loops (anidados) o las funciones lambda por map(), filter() y reduce(), ...!
Sejal Jaiswal's photo

Sejal Jaiswal

14 min

Tutorial

Tutorial de Iteradores y Generadores de Python

Explore la diferencia entre Iteradores y Generadores de Python y aprenda cuáles son los mejores para usar en diversas situaciones.
Kurtis Pykes 's photo

Kurtis Pykes

10 min

Tutorial

Python Copy List: Lo que debes saber

Comprende cómo copiar listas en Python. Aprende a utilizar las funciones copy() y list(). Descubre la diferencia entre copias superficiales y profundas.
Allan Ouko's photo

Allan Ouko

7 min

Tutorial

Cómo eliminar un elemento de una lista en Python

Comprende cómo eliminar elementos de una lista en Python. Familiarízate con métodos como remove(), pop() y del para la gestión de listas.
Allan Ouko's photo

Allan Ouko

7 min

Tutorial

Tutorial de funciones de Python

Un tutorial sobre funciones en Python que cubre cómo escribir funciones, cómo invocarlas y mucho más.
Karlijn Willems's photo

Karlijn Willems

14 min

Tutorial

Método Python List index() Explicado con Ejemplos

Aprende a utilizar la función index() de Python para encontrar la posición de los elementos en las listas.
Sejal Jaiswal's photo

Sejal Jaiswal

6 min

Ver másVer más