-
A gente já conhece
a estrutura de listas
-
e uma das tarefas mais
comuns que a gente vai fazer,
-
basicamente, no dia a dia, é
filtrar itens através de uma lista.
-
E tem uma técnica chamada
"list comprehension"
-
que vai deixar o nosso
código muito mais claro
-
e bem parecido com o inglês
que a gente vai ver agora.
-
Aqui no VS Code,
eu já criei uma lista
-
com alguns números aleatórios, tem
números pares e números ímpares.
-
Imagine, agora, que a gente
precisa criar uma nova lista
-
a partir dessa aqui,
só que, dessa vez,
-
uma lista que contenha
apenas números pares.
-
A lista vai ser essa aqui,
"numeros_pares",
-
que vai começar
sem nenhum item.
-
A gente sabe qual é a regra para
definir se um número é par ou não,
-
basta a gente
dividir ele por 2
-
e ver se o resultado é
ou não um número inteiro.
-
Se ele for um número inteiro,
-
significa que aquele número
é um número par, tudo bem?
-
Então, a gente poderia
criar um loop
-
usando a estrutura
de repetição for,
-
para percorrer item a item
fazendo essa verificação.
-
Mas existem formas mais
simples de fazer isso no Python
-
e uma delas é usando o que nós
chamamos de "list comprehension".
-
O list comprehension
se baseia em, basicamente,
-
a gente escrever uma consulta
com base em uma lista
-
em que a gente
consegue definir filtros
-
e até mesmo transformações
do resultado.
-
Ou seja, a gente consegue
partir de uma lista base
-
e escrever alguma condição
do tipo "a partir da lista tal,
-
chame cada item de alguma coisa
e, então, retorne apenas os itens
-
cuja condição X
for atendida".
-
Eu sei, ficou um pouco complicado
de entender apenas falando,
-
mas na hora que a gente escrever,
isso vai ficar bem claro.
-
Vamos lá.
-
Aqui no código, a gente ainda
está com aquela nossa lista vazia.
-
O que a gente vai fazer é
começar expandindo ela aqui
-
para que a gente tenha espaço
para escrever a list comprehension.
-
Então, lembra
do que eu comentei,
-
a gente vai precisar meio
que percorrer, indiretamente,
-
cada um daqueles
itens e, para isso,
-
a gente vai ter que chamar
esses itens de alguma coisa.
-
Como a gente está falando
de uma lista de números,
-
nada mais justo do que,
para cada número,
-
a gente chame
ele de número.
-
Então, por isso, a gente vai
escrever exatamente isso,
-
"for numero", ou seja, para
cada número, de onde?
-
Da lista "numeros", então
a gente escreve "in numeros",
-
ou seja, a gente estará
percorrendo a lista "numeros"
-
e, para cada item, a gente
vai chamar de "numero".
-
E, aqui embaixo, a gente
consegue colocar a condicional
-
que vai fazer com que esse número
entre ou não no nosso filtro.
-
No nosso caso,
-
a gente quer, justamente, ver
se o resultado da divisão por 2
-
é um número quebrado.
-
Se ele for, esse item
não entra na lista.
-
E, no Python, a gente tem
um operador específico para isso,
-
que é o módulo, veja só.
-
Aqui, a gente vai colocar
o "if numero", módulo 2,
-
isso vai fazer, basicamente,
com que ele pegue
-
especificamente
o resultado da divisão,
-
então, nesse caso, se o resultado
for 0, esse número é par.
-
Então, é isso que a gente
vai colocar aqui.
-
Então, eu estou percorrendo
a lista de números,
-
chamando cada
item de "numero"
-
e colocando, no resultado,
apenas os itens cuja divisão por 2
-
resulte em 0
como resultado de sobra.
-
E, aqui no começo, eu coloco o que
eu quero retornar desse meu filtro,
-
ou seja, a gente acabou
de filtrar a lista
-
e está apenas com a lista
de retorno em memória.
-
Caso a gente queira fazer alguma
transformação nesse valor,
-
como multiplicar por 2
ou qualquer outra coisa do tipo,
-
esse é o momento.
-
No nosso caso, a gente quer
apenas retornar esse item,
-
então eu vou basicamente
colocar, aqui, "numero".
-
Dessa forma, a nossa leitura
fica desse jeito aqui:
-
para o número que está
dentro de 'numeros",
-
se o número for par,
você retorna o número.
-
E o resultado disso tudo
-
vai ser colocado dentro
da variável "numeros_pares".
-
E, aqui no final da execução,
eu vou executar um print
-
colocando o "numeros_pares"
-
para que a gente consiga checar
se isso aqui realmente está certo.
-
Dentro do terminal, então eu vou
executar o "python.exe .\main.py"
-
e pronto, a gente consegue
ver que os números pares
-
foram extraídos
com sucesso daquela lista.
-
Caso eu queira, pelo contrário,
os números ímpares,
-
basta que eu negue
essa condição
-
e os números ímpares
serão retornados.
-
Então a gente consegue ver
ali, agora, o 1, 67, 29 e 91
-
e também a gente consegue
fazer a manipulação
-
que eu comentei
anteriormente.
-
O nosso objetivo
inicial já foi atendido,
-
mas suponha que a gente precise
retornar esses números ímpares,
-
só que em números pares,
-
a gente poderia vir aqui
e multiplicar por 2.
-
O list comprehension fez
o filtro e, desse filtro,
-
antes de retornar para a lista,
a gente fez uma transformação,
-
multiplicando cada um dos itens
que foram retornados por 2.
-
E, dessa forma, a gente tem
o resultado "2, 134, 58, 182",
-
que são basicamente o dobro
daqueles valores ímpares
-
que a gente tinha no começo.