Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

[Dúvida] List Comprehensions

Gostaria de saber mais sobre (List Comprehensions):

def proximo ano(idade):
  return idade+1

# Qual seria a função desse proximo_ano(idade)
[proximo_ano(idade) for idade in idades if idade > 21]

Se eu entendi direito seria tipo

Olha faz proximo_ano(idade) na minha lista se a idade for maior que 21?

Confuso =/

3 respostas

Oi Caio,

é isso sim. Você está aplicando a função proximo_ano() a todas as idades da lista que forem maiores que 21.

idades = [18, 21, 22, 25]
idade_calculada = [proximo_ano(idade) for idade in idades if idade > 21]
print(idade_calculada)

o resultado será uma lista apenas com os valores de 'idades' maiores que 21 só que já modificados pela função.

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Acredito que eu não consegui me expressar isso eu entendi tipo: newlist = [expression for item in iterable if condition == True] Minha dificuldade é entender essa (expression) peguei esse exemplo em w3schools, vou assistir essa aula mais uma vez essa parte está me deixando confuso.

solução!

Oi Caio,

uma list comprehension funciona como um bloco for só que voltada para gerar uma lista. Essa expression nada mais é que qualquer comando que vc quiser, podendo ser um valor qualquer, resultado de uma função ou mesmo uma função.

Se vc quiser pensar na estrutura, ela nada mais é do que um for colocado em uma linha.

# list comprehension
newlist = [expression for item in iterable if condition == True]

# for
newlist = []
for item in iterable:
    if condition == True:
        newlist.append(expression)

Como vc pode ver, a expressão é apenas um comando que vc quer realizar, normalmente com o item numa lista comprehension, mas não obrigatoriamente.

palavra = 'programa'

# gera uma lista com cada uma das letras separadas
l1 = [letra for letra in palavra]

# gera uma lista com cada uma das letras separadas e maiusculas
l2 = [letra.upper() for letra in palavra]

# gera uma lista com o mesmo valor sempre
l3 = [1 for letra in palavra]

# gera uma lista com cada letra repetida
l4 = [letra+letra for letra in palavra]

# gera lista a partir de um range
l5 = [i for i in range(10)]

# gera lista com valores ao quadrado a partir de um range
l6 = [i**2 for i in range(10)]

Esses são alguns exemplos que talvez ajudem a entender melhor.