Como usar a função filter() em Python

Aprenda como usar a função filter() do Python para extrair elementos de coleções. Compare o filtro com compreensões de lista e retornos de chamada lambda.

Experimente esta solução no Editor

Visão geral

A filtragem de dados é uma tarefa central na programação de aplicativos. Freqüentemente, você precisará pesquisar em uma lista e extrair elementos que atendam a critérios específicos, como extrair usuários ativos de um banco de dados de perfis ou filtrar números negativos de registros de sensores. Python fornece uma ferramenta funcional integrada chamada `filter()` para essa finalidade.

A função `filter(function, iterable)` recebe uma função de filtragem e um iterável como argumentos. O argumento da função deve retornar um valor booleano (`True` ou `False`) para cada elemento. A função `filter()` avalia cada elemento, retendo apenas aqueles que são avaliados como `True`, e retorna um objeto iterador (um objeto `filter`) contendo os resultados.

Assim como `map()`, `filter()` avalia os elementos preguiçosamente. Se você precisar de uma lista padrão imediatamente, você converte a saída usando o construtor `list()`: `list(filter(func, data))`. Se você passar `None` como parâmetro de função (por exemplo, `filter(None, data)`), o Python filtrará automaticamente todos os elementos que são falsos, o que é um ótimo atalho para limpar valores vazios.

Saída de código e execução

Este script demonstra a filtragem de arrays numéricos, a extração de itens de dicionário e o descarte de strings vazias falsas com filter().

filter_function.py
Experimente no 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)
Saída terminal
Positives only: [3, 8]
Words longer than 4 chars: ['elephant', 'giraffe']
Falsy values removed: ['hello', 'world', 'active']

Implementação passo a passo

  • Defina uma função que aceite um elemento e retorne um valor booleano que representa os critérios de filtro.
  • Chame filter(function, iterable) para criar um iterador lento de correspondências.
  • Converta o objeto de filtro resultante em uma lista usando list(filter(...)) se você precisar manipular os registros.
  • Passe None como argumento da função para filtrar todos os valores falsos (como None, 0 e strings vazias).

Perguntas frequentes

O que acontece se a função passada para filter() não retornar um booleano?

Python avalia a veracidade do valor retornado. Se o valor for avaliado como True em um contexto booleano, o elemento será mantido.

Devo usar filter() ou uma compreensão de lista?

Uma compreensão de lista com uma condição if (por exemplo, [x para x na condição if da lista]) é frequentemente preferida para facilitar a leitura, mas filter() é limpo e de alto desempenho, especialmente ao usar funções integradas existentes.

Tópicos Relacionados

Recursos Python recomendados

Expanda seu conhecimento com tutoriais interativos relacionados, folhas de dicas e comparações de código.