List-comprehension, o que é e porque usar
- #Python
E ai família DIO, tudo certo com vocês?
Eu sou o Bruno, sou entusiasta da linguagem Python e decidi passar um pouco de conteúdo aos que estão querendo se aprofundar mais na linguagem.
Dessa vez eu vou trazer pra vocês o conceito de "list comprehension", recurso muito utilizado no python, espero que aproveitem :)
Pré-Requisitos:
- Básico de Python (iterações e listas)
Suponhamos que você queira montar uma lista com os dados de um coleção, por exemplo você quer adicionar vários quadrados perfeitos a uma lista.
Um método de fazer isso é o abaixo:
quadrados = [] # Declara a variável 'quadrados' como uma lista vazia
for i in range(1, 11): # Itera sobre os números de 1 a 10
quadrados.append(i*i) # Adiciona o número ao quadrado na lista
print(quadrados) # Imprime a lista no console
=========================
OUTPUT: [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
Um código bem simples de exemplo, porém mal otimizado.
Toda vez que uma iteração do for é executada, ela invoca o método 'append', que como comentarei mais em outro artigo, é uma operação muito custosa.
Para evitar esse tipo de situação, o python veio como uma solução chamada "list comprehension <3".
Vou reescrever o código acima utilizando esse conceito.
quadrados = [i*i for i in range(1, 11)]
print(quadrados)
=========================
OUTPUT: [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
Consegue perceber as semelhanças e as diferenças? Em uma simples linha nós iteramos sobre uma coleção (o range - que na verdade é um generator, mas isso é assunto pra outra hora), e adicionamos elementos a uma lista aplicando uma operação. Simples né? Vamos a outro exemplo.
Imagine agora que você deseja adicionar todos os números impares em uma lista (quase o exemplo da capa hehe). Um método de fazer isso é o abaixo:
impares = [] # Declara a variável 'quadrados' como uma lista vazia
for i in range(1, 11): # Itera sobre os números de 1 a 10
if i%2 == 1:
impares.append(i)
print(impares)
=========================
OUTPUT: [1, 3, 5, 7, 9]
Mas e agora, temos uma condição no meio do laço for, como a gente transforma isso em uma linha?
Sem problemas, da pra colocar com um if no list-comprehension também. A sintaxe fica a seguinte:
impares = [i for i in range(1, 11) if i%2==1]
print(impares)
=========================
OUTPUT: [1, 3, 5, 7, 9]
Dica da vez: enquanto você não estiver seguro em usar o list-comprehension, a vezes demora pra sintaxe entrar na cabeça, é super normal, escreva seu método, função ou procedimento utilizando a sintaxe com o 'append' primeiro e depois tente transformar em list-comprehension. Com o tempo vai se tornar natural.
Utilizar o list-comprehension é um benefício tanto pro programa quanto pro programador, já que além de ser MUITO mais otimizado, deixa o código mais limpo e mais fácil de entender o que está acontecendo.
Então sempre que puder, use e abuse desse recurso. Espero que esse conhecimento seja útil para vocês. Até mais DIO Family. ;)