filter

Nombre completo
filter
Descripción

La función filter recibe como argumentos una función y un objeto iterable y devuelve los elementos del iterable que satisfacen la función (aquellos para los que la función devuelve el booleano True). Podemos decir que filter filtra el iterable dejando solo aquellos elementos que satisfacen la función indicada.

Si la función pasada como primer argumento es None, se aplica la función identidad. Es decir, se devuelve el mismo valor que se recibe como argumento. Esto significa que los elementos del iterable que tomen el valor True van a pasar el filtro, y los que tomen el valor False no.

Según se indica en la documentación de Python, esta función "recuerda a un bucle for" (pues recorre todos los elementos del iterable comprobando si cumplen o no la condición en cuestión) pero "es una función integrada y más rápida".

Sintaxis

filter(function, iterable)

Parámetros
  • function: función que deberán satisfacer los elementos para ser devueltos como resultado de la función. El resultado de esta función tras aplicarla a cada elemento deberá ser un booleano.
  • iterable: objeto cuyos elementos se van a evaluar
Resultado

La función filter devuelve un iterable.

Ejemplos

Si partimos de una lista de números positivos y negativos:

numbers = [4, -2, 6, 3, -1, 6]

...podemos filtrarla para dejar solo los números positivos con el siguiente código:

def is_positive(n):
    return n >= 0

filter(is_positive, numbers)

<filter at 0x27717a57a90>

Comprobamos que el resultado es un iterable que podemos convertir, por ejemplo, en una lista para observar su contenido:

list(filter(is_positive, numbers))

[4, 6, 3, 6]

En un caso como éste resulta más sencillo definir la función a aplicar como función lambda directamente como argumento de filter:

list(filter(lambda n: n>= 0, numbers))

[4, 6, 3, 6]

Si se pasa como primer argumento el valor None, se aplica la función identidad. Por ejemplo:

elements = [True, False, True, False]

list(filter(None, elements))

[True, True]

Comprobamos que solo se han mantenido los valores de elements que tomaban el valor True.

 

En el caso de que los elementos sean números, serán considerados False aquellos que tomen el valor cero, y True el resto:

numbers = [2, 0.5, 0, -0.1, 0, -3]

list(filter(None, numbers))

[2, 0.5, -0.1, -3]

Si los elementos son cadenas de texto, se consideran False las cadenas vacías, y True el resto. Por ejemplo, partimos de la siguiente lista de textos:

texts = ["Python", "", "and", "Artificial", " ", "Intelligence"]

Obsérvese que se ha incluido una cadena de texto vacía (el segundo elemento) y una que incluye un espacio en blanco (y no vacía, por lo tanto). Si aplicamos la función filter obtenemos lo siguiente:

list(filter(None, texts))

['Python', 'and', 'Artificial', ' ', 'Intelligence']

Comprobamos que han pasado el filtro todos los textos menos la cadena vacía.

Enviado por admin el Mié, 13/01/2021 - 14:11