As Funções Map e Filter do Python

Cansado de programar?

Cansado(a) de quebrar a cabeça para aprender a programar Python de verdade?

Conheça a melhor e mais completa formação de Python e Django e sinta-se um programador verdadeiramente competente. Além de Python e Django, você também vai aprender Banco de Dados, SQL, HTML, CSS, Javascript, Bootstrap e muito mais!

Quero aprender Python e Django de Verdade! Quero aprender!
Suporte

Tire suas dúvidas diretamente com o professor

Suporte

Projetos práticos voltados para o mercado de trabalho

Suporte

Formação moderna com foco na prática profissional

Olá Pythonista!

Neste artigo, iremos falar sobre as funções map e filter do Python e como elas podem ser usadas para otimizar seu código sem ter que utilizar laços de repetição!

Ainda não domina Laços de Repetição utilizando Python? Então acesse agora nosso artigo sobre loops utilizando for e loops utilizando while AGORA!!

As funções map e filter são de extrema importância para a construção de códigos Pythônicos e são contribuições da programação funcional para o Python!

Agora sem enrolação, vamos ao conteúdo!

Vá direto ao assunto…

A função map

Muitas vezes, enfrentamos situações em que precisamos executar a mesma operação em todos os itens de um iterável de entrada (uma lista, um set, uma tupla) para se construir um novo iterável.

A abordagem mais comum para esse tipo de problema é usar loops for ou while do Python.

Contudo, você também pode resolver esse problema sem um loop de repetição, usando a função map() disponível na biblioteca padrão da própria linguagem (sem precisar instalar algo com pip ou importar com import).

A sintaxe da função map é a seguinte:

1
map(funcao, iteravel1, iteravel2, ..., iteravelN)

Nela:

  • funcao é a função que iremos aplicar a cada elemento dos iteráveis de entrada.
  • iteravel1, ..., iteravelN são iteráveis nas quais a função funcao será aplicada, elemento a elemento

Para entender melhor, vamos aos exemplos!

Exemplos da função map

Suponha que você tenha uma lista de números e que lhe pedissem para somar 5 a todos os valores da lista.

A forma mais comum seria utilizar um loop for, assim:

1
2
3
4
5
lista = [1, 2, 3, 4, 5] 
resultado = [] 

for item in lista:
    resultado.append(item + 5)

É possível conseguir o mesmo resultado utilizando a função map!

Veja como o código acima poderia ser reescrito, utilizando esta função:

1
2
3
4
5
def soma_5(numero):
    return numero + 5

lista = [1, 2, 3, 4, 5]
lesultado = list(map(soma_5, lista))

Desta forma, estamos aplicando a função soma_5 a cada elemento da lista lista e o resultado será o mesmo da versão com o loop for.

A função map com múltiplos iteráveis

Como vimos na sintaxe da função, map possibilita passarmos múltiplos iteráveis de entrada.

Para isso, é necessária uma função que possua dois ou mais argumentos.

Vamos entender no exemplo a seguir!

1
2
3
4
5
6
from math import pow

numeros = [1, 2, 3]
expoentes = [4, 5, 6, 7]

resultado = list(map(pow, numeros, expoentes))  

Agora acompanhe a execução de cada iteração de map:

:point_right: Na primeira iteração, map vai aplicar a função pow, utilizando numeros[0] e expoentes[0] como argumentos, assim: pow(1,4) = 1

:point_right: Em seguida, map vai aplicar a função pow, utilizando numeros[1] e expoentes[1], assim: pow(2,5) = 32

:point_right: Por último, map vai aplicar a função pow, utilizando números[2] e expoentes[2], assim: pow(3,6) = 729

A iteração termina na menor sequência, portanto o número 7, em expoentes[3], não será utilizado pois a lista numeros não possui o elemento numeros[3].

E antes de continuarmos: você sabia que temos uma aula completa sobre as funções map e filter na Jornada Python - nosso curso completão? Dá uma conferida no link abaixo! :point_down:

Jornada Python Jornada Python

A função filter

A função filter do Python serve para filtrar elementos de iteráveis que satisfaçam determinadas condições.

Essas condições são calculadas através de uma função que deve retornar True ou False para determinado argumento de entrada.

A abordagem mais comum, assim como a função map, seria a utilização de loops para iterar sobre os elementos verificando elemento a elemento se a condição foi satisfeita ou não.

Contudo, com a função filter é possível fazer isso sem ter que se preocupar com as estruturas de repetição for ou while!

A sintaxe da função filter é:

1
filter(funcao, iteravel) 

Nela:

  • funcao é a função de filtragem dos elementos, que deve retornar True ou False; e
  • iteravel é a estrutura na qual a função funcao será aplicada.

Vamos entender melhor com exemplos!

Exemplos da função filter

Suponha que você tenha que desenvolver uma função que filtra elementos maiores que zero de uma lista.

O código abaixo, utilizando o loop de repetição for seria uma possível solução:

1
2
3
4
5
6
7
8
9
10
11
def numeros_positivos(numeros):  
    numeros_positivos = [] 

    for num in numeros: 
        # Condição de filtragem 
        if num > 0:
            numeros_positivos.append(num)
		
    return numeros_positivos

print(numeros_positivos([-2, -1, 0, 1, 2]))

E a saída seria:

1
[1, 2]

Veja como seria possível chegar ao mesmo resultado utilizando a função filter:

1
2
3
4
5
6
numeros = [-2, -1, 0, 1, 2]

def verifica_numero_positivo(numero):
    return numero > 0
	
print(list(filter(verifica_numero_positivo, numeros)))

E a saída seria exatamente a mesma: com menos linhas de código e com um código muito mais pythônico!

Está curtindo esse conteúdo? :thumbsup:

Que tal receber 30 dias de conteúdo direto na sua Caixa de Entrada?

Sua assinatura não pôde ser validada.
Você fez sua assinatura com sucesso.

Assine a PyDicas e receba 30 dias do melhor conteúdo Python direto na sua Caixa de Entrada: direto e sem enrolação!

Dica EXTRA: Funções Lambda

Quer deixar seu código ainda mais pythônico?

Utilize funções lambda em conjunto com as funções map e filter e tenha os mesmos resultados dos exemplos anteriores com ainda menos linhas de código!

Ainda não domina o conceito de Funções Lambda?! Não tem problema, acesse nosso artigo sobre Funções Lambda antes de continuar :wink:

Exemplo “soma + 5” do map utilizando funções lambda:

1
2
3
lista = [1, 2, 3, 4, 5]  

resultado = list(map(lambda x: x+5, lista))

Exemplo de filtragem de números positivos do filter utilizando funções lambda:

1
2
3
numeros = [-2, -1, 0, 1, 2]  

numeros_positivos = list(filter(lambda x: x > 0, numeros)) 

:suitcase: Use map, filter em funções lambda na sua próxima entrevista de emprego e impressione o recrutador!

Conclusão

Depois de termos nos aprofundado nas funções map, filter, além das funções lambda, você poderá treinar essas habilidades a fim de se tornar um programador cada vez melhor!

#newsletter Olá :wave: Curtiu o artigo? Então faça parte da nossa Newsletter! Privacidade Não se preocupe, respeitamos sua privacidade. Você pode se descadastrar a qualquer momento.