Curso
A filtragem é uma das tarefas mais comuns em Python, e é por isso que o Python facilita essa tarefa. Uma das maneiras mais simples de filtrar dados é com a função integrada filter()
. Como o nome deixa claro, o filter()
permite que você extraia apenas os itens que atendem a uma determinada condição (ou condições).
Este guia orienta você sobre como ele funciona, quando usá-lo e como ele se compara a outras ferramentas de filtragem. Dê uma lida!
O que o Python filter() faz
filter()
permite que você extraia elementos de uma lista, tupla ou qualquer iterável, mas somente se eles passarem no seu teste. Você fornece uma função (às vezes, eu vi isso ser chamado de predicado) que pega cada item e retorna True
ou False
. Se o teste for aprovado (leia-se: se sua função retornar True
), filter()
o manterá. Caso contrário, você pulará o item. Isso é bastante autoexplicativo, então vamos continuar.
Sintaxe de filter() do Python
Aqui está o formato:
filter(function, iterable)
-
function
: Especifica o teste que você deseja aplicar a cada item. Ele deve receber um argumento e retornarTrue
ouFalse
. -
iterable
: Fornece uma lista, tupla, cadeia de caracteres ou qualquer objeto que você possa percorrer em loop.
Quando você chama filter()
, ele retorna um objeto de filtro especial, não uma lista ou tupla diretamente. Para trabalhar de fato com os resultados filtrados, você geralmente agrupará a saída em uma lista ou tupla. Essa escolha de design mantém o filter()
eficiente, mas é algo que você deve ter em mente ao escrever seu código.
Exemplos de filter() em Python
Vamos praticar um pouco.
Python filter() com uma função personalizada
Vamos usar o site filter()
com uma função que escrevemos para nós mesmos.
Suponha que você queira manter apenas os números pares de uma lista:
def is_even(num):
return num % 2 == 0
numbers = [1, 2, 3, 4, 5, 6]
result = filter(is_even, numbers)
print(list(result))
Isso será impresso:
[2, 4, 6]
Observe como o is_even
verifica se um número é divisível por 2. O filter()
usa nossa função personalizada para testar cada item e manter os que passam no teste.
Python filter() com funções lambda
É claro que nem todo filtro precisa de uma definição completa da função. Às vezes, sua regra de filtragem é tão simples ou tão específica para um ponto que definir uma função nomeada é muito trabalhoso.
Aqui está o mesmo exemplo de número par, mas usando um lambda para um teste conciso e no local:
numbers = [1, 2, 3, 4, 5, 6]
result = filter(lambda x: x % 2 == 0, numbers)
print(list(result))
Você obterá o mesmo resultado de antes.
O uso de lambda com filter()
é especialmente comum quando você deseja manter seu código curto e focado. É uma ótima opção para tarefas de filtragem pontuais, permitindo que você expresse sua regra exatamente onde precisa.
Você pode usar a função filter() do Python com None como função
Às vezes, você deseja filter()
valores vazios ou falsos. Coisas como 0
, cadeias de caracteres vazias, None
, ou False
, e queremos fazer isso sem escrever uma função personalizada.
O Python tem um truque para isso: Se você definir o argumento da função em filter()
como None
, filter()
removerá automaticamente todos os itens que o Python considerar False
.
Aqui está um exemplo:
items = [0, 1, '', 'hello', [], [2, 3], None, False, True]
result = filter(None, items)
print(list(result))
Isso será impresso:
[1, 'hello', [2, 3], True]
Filtragem de dados de texto
Agora vamos aplicar o site filter()
a um problema prático e cotidiano. Suponha que você tenha uma lista de palavras e queira apenas aquelas que começam com "a". Esse tipo de filtragem direcionada aparece o tempo todo no processamento de texto.
words = ['apple', 'banana', 'apricot', 'cherry', 'avocado']
result = filter(lambda word: word.startswith('a'), words)
print(list(result))
Você receberá:
['apple', 'apricot', 'avocado']
Filtragem com várias condições
Às vezes, seus critérios de filtragem ficam mais complexos. E se você precisar de itens que atendam a várias condições? Veja como você pode fazer isso usando um lambda. Neste exemplo, estamos encontrando números que são pares e maiores que 10.
numbers = [4, 10, 12, 15, 20, 23, 28]
result = filter(lambda x: x % 2 == 0 and x > 10, numbers)
print(list(result))
Isso imprime:
[12, 20, 28]
(Se eu tivesse ainda mais condições, consideraria a possibilidade de mudar de um lambda para uma função nomeada para maior clareza).
filter() vs. Compreensão de listas
As compreensões de lista são outra forma popular de selecionar itens. Ambas as abordagens permitem que você filtre os dados, mas cada uma tem seu próprio estilo.
Aqui está o exemplo do número par novamente, desta vez usando uma compreensão 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 o filter()
quanto as compreensões de lista darão conta do recado. As compreensões de lista geralmente são mais fáceis de ler para filtros diretos, especialmente quando a regra é curta e simples.
Por outro lado, o site filter()
funciona bem quando você já está trabalhando com funções ou quando deseja encadear várias etapas de processamento.
Usos mais avançados
Vamos tentar encontrar alguns casos mais interessantes:
filter() com outros iteráveis
Assim como fizemos com as listas, o filter()
também funciona com qualquer iterável, como tuplas, conjuntos e até mesmo expressões geradoras. É bom saber disso porque seus dados nem sempre estarão em forma de lista.
Veja como você pode filtrar uma tupla:
numbers = (10, 15, 20, 25, 30)
result = filter(lambda x: x > 20, numbers)
print(tuple(result))
Isso será impresso:
(25, 30)
Lembre-se apenas de converter o objeto de filtro para o tipo que você deseja (lista, tupla etc.) quando precisar usar os resultados diretamente.
Agora, eu também mencionei geradores, portanto, para ser minucioso, mostrarei um exemplo de filtragem com geradores:
numbers = (x for x in range(10))
result = filter(lambda x: x % 2 == 0, numbers)
print(list(result))
Trata-se de um gerador porque esta linha: numbers = (x for x in range(10))
cria um objeto gerador. (Ele é preguiçoso e não gera todos os valores de uma vez).
A linha final: print(list(result))
força a avaliação convertendo o objeto de filtro preguiçoso em uma lista.
Combinando filter() com map()
E se você quiser filtrar e transformar seus dados, como, no nosso próximo exemplo, elevar ao quadrado apenas os números pares de uma lista?
O Python facilita isso, permitindo que você combine filter()
e map()
. Primeiro, o filter()
seleciona os itens que você deseja e, em seguida, o map()
aplica outra função a cada um deles.
Aqui está isso na prática:
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))
Isso imprime:
[4, 16, 36]
Ao encadear filter()
e map()
, você pode criar pipelines de dados claros e legíveis, selecionando primeiro os itens que lhe interessam e, em seguida, transformando-os conforme necessário. Você terá a oportunidade de usar esse padrão em seu próprio trabalho.
Coisas a serem observadas
Por mais útil que seja o site filter()
, há alguns erros que as pessoas cometem:
-
filter()
retorna um objeto de filtro, não uma lista. Isso pode atrapalhá-lo se você espera ver resultados imediatamente. Sempre o envolva em uma lista (ou tupla) se você precisar ver ou reutilizar os resultados. -
filter()
só funciona com um iterável de cada vez. Se quiser filtrar com base em várias listas, você precisará juntá-las ou usar outra abordagem. -
filter()
é preguiçoso. Na verdade, ele não processa os dados até que você os converta em uma lista, tupla ou faça um loop sobre eles. Tenha em mente esse comportamento ao depurar.
Conclusão
Como você viu, a função filter()
do Python oferece uma maneira rápida de limpar os dados, retirando apenas o que importa. filter()
ajuda se você estiver escrevendo um lambda único ou conectando uma função nomeada.
Se você não tiver certeza de como usar o filter()
, ou se achar que foi simples o suficiente e quiser continuar aprendendo, temos ótimos recursos para ajudar. Recomendo a você o nosso programa de habilidades Python Programming Fundamentals.

Perguntas frequentes sobre o filtro Python
O que a função filter() do Python faz?
A função filter()
recebe uma função e um iterável e retorna um novo iterável com apenas os itens que passam em um teste. A função de teste deve retornar True
para os itens que você deseja manter e False
para aqueles que você deseja ignorar.
Por que preciso envolver o resultado de filter() em list() ou tuple()?
filter()
retorna um objeto de filtro, que é um iterador. Para exibir ou reutilizar os resultados filtrados, você normalmente os converterá em uma lista ou tupla usando list()
ou tuple()
. Essa etapa é essencial para imprimir, depurar ou passar o resultado para outras funções.
Posso usar filter() sem escrever uma função personalizada?
Sim. Você pode usar uma função lambda para testes curtos e pontuais ou passar None
como argumento da função para remover automaticamente todos os valores "falsos" como 0
, ''
, None
e False
.
Como o filter() se compara às compreensões de lista?
Tanto o filter()
quanto as compreensões de lista permitem que você filtre os dados, mas as compreensões de lista costumam ser mais legíveis para condições simples. O filter()
é útil para reutilizar a lógica por meio de funções ou encadeamento com ferramentas como map()
.
Posso aplicar várias condições com filter()?
Com certeza. Você pode combinar várias condições usando operadores lógicos dentro de sua função de teste ou lambda. Para lógica complexa, geralmente é melhor usar uma função nomeada para manter o código legível.