Pular para o conteúdo principal

Python filter(): Mantenha o que você precisa

Aprenda a usar a função filter() do Python para extrair itens de listas ou outros iteráveis. Entenda as principais diferenças entre o filtro e as ferramentas similares do Python.
Atualizado 27 de jun. de 2025  · 7 min lido

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 retornar True ou False.

  • 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


Josef Waples's photo
Author
Josef Waples

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.

Tópicos

Aprenda Python com a 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 detalhesRight Arrow
Iniciar curso
Ver maisRight Arrow
Relacionado

Tutorial

Tutorial de compreensão de dicionário Python

Saiba tudo sobre a compreensão de dicionário do Python: como você pode usá-la para criar dicionários, substituir loops for (aninhados) ou funções lambda por map(), filter() e reduce(), ...!
Sejal Jaiswal's photo

Sejal Jaiswal

14 min

Tutorial

Tutorial de iteradores e geradores Python

Explore a diferença entre Iteradores e Geradores do Python e saiba quais são os melhores para usar em várias situações.
Kurtis Pykes 's photo

Kurtis Pykes

10 min

Tutorial

21 ferramentas essenciais do Python

Aprenda sobre as ferramentas Python essenciais para o desenvolvimento de software, raspagem e desenvolvimento da Web, análise e visualização de dados e aprendizado de máquina.
Abid Ali Awan's photo

Abid Ali Awan

6 min

Tutorial

Tutorial e exemplos de funções e métodos de lista do Python

Saiba mais sobre as funções e os métodos da Lista do Python. Siga exemplos de código para list() e outras funções e métodos Python agora!
Abid Ali Awan's photo

Abid Ali Awan

7 min

Tutorial

Python Copy List: O que você deve saber

Entenda como copiar listas em Python. Saiba como usar as funções copy() e list(). Descubra a diferença entre cópias superficiais e profundas.
Allan Ouko's photo

Allan Ouko

7 min

Tutorial

Como remover um item de uma lista em Python

Entenda como você pode remover itens de uma lista em Python. Familiarize-se com métodos como remove(), pop() e del para o gerenciamento de listas.
Allan Ouko's photo

Allan Ouko

7 min

Ver maisVer mais