Ir para o conteúdo
PyPro PyPro
Artigos Cursos Projetos Missão Sobre nós Contato

Dicas Pythônicas

Utilizando filter e Funções Lambda para Filtragem Eficiente

Esse par de ferramentas pode simplificar muito o seu código e torná-lo mais expressivo

Por Dilermando Piva Jr. · 06/12/2024

Olá, caro leitor! Seja muito bem-vindo a mais uma edição da "Dicas Pythonicas".

No pyPRO, estamos sempre buscando trazer dicas que te ajudem a escrever um código mais limpo, eficiente e Pythonico!

Hoje, vamos abordar como utilizar a função filter junto com funções lambda para realizar filtragens de listas de forma eficiente. Esse par de ferramentas pode simplificar muito o seu código e torná-lo mais expressivo.

Vamos começar com um exemplo simples de filtragem:

 

# Filtrando uma lista manualmente

a = [5, 6, 7, 8, 9, 10, 11]

b = []

for i in a:

if i > 8:

b.append(i)

print(b) # Saída: [9, 10, 11]

 

Neste exemplo, usamos um loop for e uma condição if para filtrar os elementos da lista a que são maiores que 8. O resultado é armazenado na lista b.

Agora, vamos ver como podemos simplificar esse código usando filter e uma função lambda:

# Utilizando filter e lambda

b = list(filter(lambda x: x > 8, a))

print(b) # Saída: [9, 10, 11]

 

Como Funciona?

  • filter(function, iterable): A função filter aplica uma função a cada elemento do iterável (neste caso, a lista a). Apenas os elementos para os quais a função retorna True são incluídos na nova lista.
  • lambda x: x > 8: Esta é uma função anônima que verifica se x é maior que 8. As funções lambda são ótimas para expressar lógica simples diretamente no local onde são usadas, sem a necessidade de defini-las separadamente.

Essa combinação de filter com funções lambda permite que você escreva código mais conciso e legível, especialmente quando você está lidando com operações simples de filtragem.

 

Entendendo Melhor a Função filter

 

A função filter() pode ser utilizada para diversas situações além de comparar valores numéricos. Ela pode ser usada para filtrar palavras de uma lista, remover valores nulos ou até mesmo filtrar objetos baseados em atributos.

 

Exemplo 1: Filtrando palavras curtas em uma lista de strings

 

palavras = ["Python", "é", "uma", "linguagem", "poderosa"]

filtradas = list(filter(lambda palavra: len(palavra) > 3, palavras))

print(filtradas) # Saída: ['Python', 'linguagem', 'poderosa']

 

Aqui, usamos filter() para remover palavras com menos de 4 caracteres, resultando em uma lista mais relevante.

 

Exemplo 2: Filtrando valores None de uma lista

 

dados = [10, None, 20, None, 30, 40]

limpos = list(filter(lambda x: x is not None, dados))

print(limpos) # Saída: [10, 20, 30, 40]

 

Esse uso de filter() é muito útil quando trabalhamos com dados sujos que podem conter valores nulos ou inválidos.

 

Funções lambda: O Poder das Funções Anônimas

 

As funções lambda são conhecidas como funções anônimas, pois não precisam de um nome e são definidas diretamente no local onde serão usadas. Elas são extremamente úteis para expressar operações simples de forma compacta.

 

lambda argumentos: expressão

 

Exemplo 1: Soma de dois números

 

soma = lambda x, y: x + y

print(soma(3, 5)) # Saída: 8

 

Exemplo 2: Multiplicação dentro de map()

 

numeros = [1, 2, 3, 4]

dobrados = list(map(lambda x: x * 2, numeros))

print(dobrados) # Saída: [2, 4, 6, 8]

 

Exemplo 3: Ordenação de tuplas

 

Podemos usar lambda dentro de sorted() para ordenar elementos com base em critérios personalizados.

 

pessoas = [("Ana", 25), ("Carlos", 30), ("Bruna", 22)]

ordenadas = sorted(pessoas, key=lambda pessoa: pessoa[1]) # Ordena por idade

print(ordenadas)

# Saída: [('Bruna', 22), ('Ana', 25), ('Carlos', 30)]

 

Quando NÃO Usar lambda?

 

Embora as funções lambda sejam poderosas, elas devem ser evitadas em lógicas muito complexas. Para funções mais longas, é preferível criar uma função def nomeada, pois isso melhora a legibilidade do código.

Exemplo ruim de lambda:

 

# Muito confuso! Evite isso

f = lambda x: x**2 if x % 2 == 0 else x + 5 if x < 10 else x * 2

 

Dica: Se o código estiver difícil de entender depois de alguns segundos de leitura, talvez seja hora de substituir o lambda por uma função normal.

 

Portanto...

 

Usar filter() e funções lambda pode tornar seu código mais eficiente e conciso, evitando loops desnecessários e mantendo a clareza. Essas técnicas são muito úteis quando trabalhamos com manipulação de dados, listas e filtragens em Python.

 

Espero que esta dica te inspire a explorar ainda mais o uso de funções lambda e filter em seus projetos. Não perca nossa próxima edição, onde traremos mais uma técnica poderosa para aprimorar seu código!

Até lá, continue praticando e evoluindo. Lembre-se: no pyPRO, sempre há mais para descobrir!

 

Um forte abraço,

 

Prof. Dr. Dilermando Piva Jr.

Idealizador do Projeto pyPRO

Visite: https://pypro.com.br para mais informações sobre Python, Ciência de Dados e Git/GitHub.

← Voltar para artigos

pyPRO - Python para todos.

Instagram YouTube LinkedIn X (Twitter)