Python — Mapear, Filtrar, Reduzir

Mar 06 2023
MAP Primeiro, vamos entender por que exatamente precisamos de uma função map e como ela nos ajuda a reduzir nosso trabalho e tornar nosso código mais eficiente. Suponha que temos uma lista para trabalhar conforme abaixo, mas o problema com a lista é que todos os elementos presentes nela estão no formato string, portanto, se tentarmos realizar qualquer operação numérica, ela não produzirá nenhum resultado.

MAPA

Primeiro, vamos entender por que exatamente precisamos de uma função map e como ela nos ajuda a reduzir nosso trabalho e tornar nosso código mais eficiente.

Suponha que temos uma lista para trabalhar conforme abaixo, mas o problema com a lista é que todos os elementos presentes nela estão no formato string, portanto, se tentarmos realizar qualquer operação numérica, ela não produzirá nenhum resultado.

l1 = ["3","5","9","12","25"]
x = l1[0]+1
print(x)
----------------------------------------------------------------------
-----
TypeError Traceback (most recent call
last)
Input In [1], in <cell line: 2>()
1 l1 = ["3","5","9","12","25"]
----> 2 x = l1[0]+1
3 print(x)
TypeError: can only concatenate str (not "int") to str

Agora, uma maneira de contornar isso é um loop for, vamos dar uma olhada

for i in range(len(l1)):
l1[i] = int(l1[i])

x = l1[0]+1
print(x)
4

Pegaremos outra lista chamada l2 e faremos a mesma operação novamente.

l2 = ["3","5","9","12","25"]
l2 = list(map(int,l2))
y = l2[0]+1
print(y)
4

Agora vamos dar uma olhada em alguns outros exemplos também, suponha que queremos descobrir os valores quadrados de uma lista inteira, vamos ver como podemos fazer isso com a ajuda da função map.

Primeiro, vamos escrever uma função 'sq' que retornará o valor ao quadrado de um determinado número

def sq(a):
  return a*a

l3 = [3,5,7,2,9]
l4 = list(map(sq,l3))
print(l4)
[9, 25, 49, 4, 81]

Agora vamos ver algo mais complicado, o que estamos tentando conseguir agora é obter o quadrado e o cubo dos números de 0,8, armazenados em uma lista. Usaremos a função map, a função lambda e também nossa palavra-chave def para descrever as funções quadrado e cubo agora. Em seguida, usaremos um loop for para criar a lista.

def sq(a):
  return a*a
def cube(a):
  return a*a*a
func = [sq,cube]
for i in range(8):
  rslt = list(map(lambda x:x(i) ,func))
print(rslt)
[0, 0]
[1, 1]
[4, 8]
[9, 27]
[16, 64]
[25, 125]
[36, 216]
[49, 343]

Como o nome sugere, a função de filtro nos ajuda a filtrar um determinado conjunto de iteráveis ​​, como argumento, ela pega a função declarada com base na qual estaremos filtrando nossos iteráveis ​​e, em seguida, leva os próprios iteráveis ​​como argumentos. Abaixo, são fornecidos 3 tipos de filtros, um filtrará números maiores que 10 da lista, um filtrará números menores que 10 e um terá condicionamento múltiplo que afirma que o número deve ser maior que 10, mas menor que 15.

l1 = [34,12,5,8,11,14,19,10,1,50]
def grt_condi(num):
  return num>10
def lsr_condi(num):
  return num<10
def multi_condi(num):
  return num>10 and num<15

l2 = list(filter(grt_condi,l1))
l3 = list(filter(lsr_condi,l1))
l4 = list(filter(multi_condi,l1))

print(l2)
print(l3)
print(l4)
[34, 12, 11, 14, 19, 50]
[5, 8, 1]
[12, 11, 14]

Vamos entender o que a função de redução faz e qual problema ela resolve. Para entender isso, vamos primeiro fazer uma declaração do problema e nosso passo a passo tradicional para resolvê-lo.

Digamos que existe uma lista e queremos obter a soma de todos os números inteiros presentes na lista

l6 = [2,3,6,5,8,9,10]
x = 0
for i in l6:
  x = x+i
print(x)
43

from functools import reduce
l7 = reduce(lambda x,y:x+y , l6)
print(l7)
43

Para mais conteúdo desse tipo, siga meu perfil do Medium e a página do LinkedIn -https://www.linkedin.com/in/chandan-sengupta/