Olá pessoas, nesse post vamos brincar com a List Comprehension em Python que é uma maneira muito útil de diminuir o tamanho do código, torná-lo mais simples e aplicar os conceitos de lista e de looping.
List Comprehension em Python
Inicialmente, a List Comprehension em Python é de extrema utilidade e sua incorporação no código trás muitos benefícios. Mas antes é preciso pontuar a importância das listas que são estruturas indexadas e que atendem as necessidades tanto para dados numéricos como alfanuméricos. Listas são uma das estruturas mais importantes e mais aplicadas em Python e estão sempre presentes na otimização da codificação.
Os seguintes métodos estão disponíveis em uma lista:
list.append(x)
: Adiciona um item ao fim da lista.list.extend(iterable)
: Adiciona todos os itens do iterável iterable ao fim da lista.list.insert(i, x)
: Insere um item em uma dada posiçãoi
.list.remove(x)
: Remove o primeiro elemento, cujo valor seja x.list.pop(i)
: Remove o item de posiçãoi
da lista e o retorna. Casoi
não seja especificado, retorna o último elemento da lista.list.clear()
: Remove todos os elementos da lista.list.index(x[, start[, end]])
: Retorna o índice do primeiro elemento cujo valor sejax
.list.count(x)
: Retorna o número de vezes que o valorx
aparece na lista.list.sort(key=None, reverse=False)
: Ordena os items da lista (os argumentos podem ser usados para customizar a ordenação).list.reverse()
: Reverte os elementos da lista.list.copy()
: Retorna uma lista com a cópia dos elementos da lista de origem.
List Comprehension: definição
As List Comprehensions são listas que são criadas de forma mais inteligente para serem aplicadas de forma mais rápida e direta, economizando linhas de programação.
A sintaxe de uma List Comprehension, normalmente
, obedece a seguinte estrutura:
nova_lista = [expressão looping condição]
expressão = variável ou expressão
looping =
condição
new_l = [x**2 for x in range(10) if (x%2)]
O resultado é uma lista contendo os números ímpares 1, 3, 5, 7 e 9 elevados ao quadrado, ou seja,
new_l = [1, 9, 25, 49, 81]
Ok, não é muito complicado, né? Então vamos complicar um pouco mais. Vamos fazer a brincadeira do Pim
, não conheces? É o seguinte: vamos “falar” números em ordem crescente e cada vez que um número divisível por 3, falamos Pim
, quer errar perde ou está fora se tivermos mais de duas pessoas. Exemplo: Pim, 1, 2, Pim, 4, 5, Pim. No problem!
Como fica isso codificando com Python:
new_l = [t if (t/3%1) else "Pim" for t in range(20)]
print(new_l)
Saída:
['Pim', 1, 2, 'Pim', 4, 5, 'Pim', 7, 8, 'Pim', 10, 11, 'Pim', 13, 14, 'Pim', 16, 17, 'Pim', 19]
A saída é o resultado do código. Note que a brincadeira começa com Pim , mas é só para ilustrar.
Coloquei até 20, mas coloque o número que quiseres, vai lá e testa.
Bom, agora vamos usar todos esses “poderes” a nosso favor. Digamos que eu tenha duas variáveis e quero fazer um scatter plot delas, ou seja, x contra y.
O código abaixo mostra como fazer o scatter plot de duas variáveis x e f(x) usando números aleatórios e fixando uma condição inicial para isso garantindo que o resultado seja sempre o mesmo para os números gerados aleatoriamente. A Figura 1 ilustra o resultado do código.
# Bibliotecas
import matplotlib.pyplot as plt
import numpy as np
%matplotlib inline
# Para gerar os números de forma aleatória e fixar uma seed
from numpy.random import seed
from numpy.random import randint
# Gerando as nossas variáveis
rng = np.random.default_rng(1020)
x = randint(1, 100, 50)
y = x**1/2 + rng.normal(2 * (x / np.max(x)))
# Inicializando o layout do gráfico
fig, ax = plt.subplots(figsize = (9, 6))
# Plotando o scatter plot
ax.scatter(x, y, s=60, alpha=0.7, edgecolors="w")
plt.title('Scatter plot', size = 20)
plt.xlabel('Eixo - X')
plt.ylabel('Eixo - Y')
Aumentando a dificuldade com List Comprehension
Agora, digamos que quero segmentar os pontos do gráfico. Vamos assumir que os valores de x
que estão abaixo de 50 representam uma condição e que os acima, representam outra. Como fazer isso no Python?
Programar é criação, ou seja, saber usar os recursos que se tem de forma a atingir um objetivo. O nosso é segmentar os em duas categorias e queremos fazer isso com List Comprehension em Python. Então aí vai…vamos fazer apenas uma pequena modificação no código anterior. Usaremos o atributo cor
na função scatter()
. Adicionaremos uma list que representará as cores dos pontos. Ficará assim:
c_cor = ['red' if i > 50 else 'blue' for i in x]
ax.scatter(x, y, s=60, c=c_cor, alpha=0.7, edgecolors="w");
O scatter plot fica como na Figura 2. Podemos diferenciar os dois grupos que foram discretizados. Se analisarmos a lista que contem os códigos de cor, c_cor
, veremos que é uma lista com valores red e blue
, que representam a cor de cada par ordenado xy
.
Aproveitando o mesmo exemplo, podemos agora aplicar mais de uma condição, por exemplo, vermelho entre 30 e 60 e os demais na cor azul. O código ficaria como abaixo. A Figura 3 ilustra a modificação no código.
c_cor = ['red' if i > 30 and i < 60 else 'blue' for i in x]
ax.scatter(x, y, s=60, c=c_cor, alpha=0.7, edgecolors="w");
Conclusão
Esta é só uma degustação do poder da List Comprehension em Python. É uma ferramenta muito útil em qualquer nível de programação que o pythonista esteja. Modifique o código a teu gosto e busque outras variantes para mudar a cor dos pontos. Até o próximo post e não esqueça de seguir-me no Instagram, Twitter, LinkedIn, etc
Encontre aqui vagas e bolsas para Mestrado e Doutorado
Fundamentalmente, para você ter um direcionamento na sua Carreira Acadêmica é primordial saber e conhecer as oportunidades desse futuro que te espera. Sendo assim, preparei para você algumas oportunidades para ter acompanhamento, tanto para mestrado como para doutorado.
– Vagas e bolsas para Mestrado março de 2023
– Vagas e bolsas para Doutorado março de 2023
Quer turbinar teu trabalho acadêmico?
Já fiz Mestrado, Doutorado, Pós-Doutorado e participei de diversas bancas. Ajudo alunos de graduação, pós-graduação, mestrado, doutorado e profissionais a melhorar seus estudos aplicando Data Science.
Quer saber como posso te ajudar a melhorar teu trabalho acadêmico… Clique Aqui e não perca esta oportunidade!
Quer dominar Data Visualization.. Clique Aqui e eleve o nível dos teus gráficos!
Quer esclarecer alguma dúvida sobre apresentações, TCC, Mestrado, Doutorado ou Carreira Acadêmica?
Entre em contato pelo formulário abaixo e vamos fazer o planejamento do teu trabalho… não perca esta oportunidade!