List Comprehension e Função Lambda

Exemplos de recursos úteis para análise de dados e criação de modelos.

Veremos aqui dois recursos da linguagem Python que são muito úteis durante todo o processo de análise, e mais ainda, bastante usados em documentações de Machine Learning e Data Science de um modo geral.

É um assunto um pouco chato e que gera dificuldade para alguns, mas ao compreender a sintaxe, podemos ver o quão poderosos são esses dois recursos.

Notebook de estudo

List Comprehension

As funções filter e map são muito úteis, só que em alguns cenários, talvez, a gente precise de mais flexibilidade — List Comprehension pode ser a melhor alternativa.

Criar lista

array1 = range(0, 15)
print(array1)
range(0, 15)[3]:

Verificar tipo do objeto

type(array1)
range

Aplicar List Comprehension

Dentro dessa primeira lista, estamos colocando alguns comandos — a lista array1 criada, a estrutura de repetição for e uma operação de potência ** 3.

Traduzindo: “para for cada item dentro in do array1, eleve ** cada item ao cubo.”

[item ** 3 for item in array1][0, 1, 8, 27, 64, 125, 216, 343, 512, 729, 1000, 1331, 1728, 2197, 2744]

Nessa segunda lista colocamos uma estrutura condicional if, além da própria estrutura de repetição for.

Traduzindo: “para (for) cada item dentro (in) do array1, imprimir o item somente se (if) a divisão do item por 2 == 0, ou seja, imprimir apenas números pares.

[item for item in array1 if item % 2 == 0][0, 2, 4, 6, 8, 10, 12, 14]

Operação dentro da List Comprehension

Traduzindo: “para (for) cada item dentro (in) do array1, se (if) o item for divisível por 2 == 0, elevar item ao quadrado.

[item ** 2 for item in array1 if item % 2 == 0][0, 4, 16, 36, 64, 100, 144, 196]

List Comprehension com Strings

lista_frases = ["Big Data",
"Machine Learning em Big Data e Algoritmos em Big Data",
"Data Science e Big Data",
"Big Data e Internet das Coisas",
"Big Data está revolucionando o mundo, pois Big Data é um grande volume de dados"]

Traduzindo: “para (for) cada item dentro (in) lista_frases, se (if) o item tiver contagem “Big Data” de cada item for ao menos 2.

[item for item in lista_frases if item.count("Big Data") >= 2]['Machine Learning em Big Data e Algoritmos em Big Data',
'Big Data está revolucionando o mundo, pois Big Data é um grande volume de dados'
]

O resultado imprimiu duas frases, afinal, temos duas frases que mencionam o termo Big Data pelo menos duas vezes na lista lista_frases — na prática relizamos um filtro.

Aplicar função diretamentamente

Traduzindo: “para (for) cada item dentro (in) array1, transforme o item em um número decimal float

[float(item) for .item in array1]
[0.0,
1.0,
2.0,
3.0,
4.0,
5.0,
6.0,
7.0,
8.0,
9.0,
10.0,
11.0,
12.0,
13.0,
14.0]

A partir daqui, as variações dependem apenas da criatividade.

Funções Lambda

Em algumas situações não precisamos criar uma função, ou seja, definindo a função. Criamos uma função apenas em tempo de execução — inline e anônima, depois de usada é descartada.

Criar array

array1 = range(0, 15)
print(array1)
range(0, 15)

Verificar tipo

type(array1)
range

Aplicamos a list comprehension para comparar com a função lamba:

Traduzindo: Para (for)cada item no (in) array1, elevar item ao quadrado

[item ** 2 for item in array1][0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196]

Map

def square(num):
return num ** 2

Como faríamos isso com a função map:

list(map(square, array1))
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196]

O resultado é exatamente o mesmo à List Comprehension, apenas tivemos um pouco mais de trabalhar por criar a função e mapeá-la a uma lista.

Lambda

Traduzindo: lambda → para cada número “num” — vamos “:” — elevar o número ao quadrado — “num**2”, aplicar isso ao array1.

list(map(lambda num: num**2, array1))
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196]

Repare que passamos lamba como uma função dentro do mapeamento. Ao invés de definir a função square, estamo fazendo isso em tempo de execução inline. List Comprehension tem uma melhor visibilidade e legibilidade.

Concatenando vários conceitos

list(map(lambda a: a**2, filter(lambda a: a % 2 == 0, range(1,20))))[4, 16, 36, 64, 100, 144, 196, 256, 324]
  1. Primeiramente temos list, que converterá o resultado em uma lista.

2. Em seguida, temos o map que aplicará uma determinada função ao conjunto de dados.

3. Dentro de map temos uma expressão lambda, que pega o elemento e eleva ao quadrado.

4. Aplicaremos lambda ao conjunto de dados em filter. Onde o range de valores de 1 a 20 é filtrado através de outro lambda que pede para retornar apenas números pares do range.

De um conjunto de dados hipoteticamente imenso criado através de um range, pegamos apenas os pares com um filtro de lambda, elevamos ao quadrado através do mapeamento com outra função lambda criada inline.

list(map(lambda a: a**2, filter(lambda a: a % 2 == 0, range(1,20))))[4, 16, 36, 64, 100, 144, 196, 256, 324]

Juntamos vários conhecimentos de forma criativa. Usar a programação para resolver os problemas — talvez seja isso que a gente deseje e não tem uma outra forma de ser feito, logo, empregamos as funções de uma maneira aninhada.

Isso a princípio pode ter alguma complexidade, mas conforme vamos aprendendo, percebemos que é mais uma boa ferramenta de trabalho.

Obrigado.

Composing a repository of books (i bought), authors (i follow) & blogs (direct ones) for my own understanding.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store