Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] Sintaxe para forçar o gerador - minuto 07:10

Olá!

Foi mencionado que existem 2 formas de forçar a gerar os valores sem utilizar o lazy:

  • list()[] e
  • list()

A segunda opção foi dada como exemplo na aula. A primeira opção não. Poderiam oferecer um exemplo usando a primeira sintaxe? Não consegui reproduzir o código utilizando a primeira sintaxe:

    gen = list(range(len(ages)))[] # forcei a geração dos valores - mesmo que o exemplo list(range(len(idades)))
    print(gen)

[0,1,2,3,4,5,6,7] # saida esperada

retorna o seguinte erro:

File "C:\universal\projects\pms\dgti\alura\python\alura-python-introducao-a-linguagem\pycollections\main.py", line 66
    gen = list(range(len(ages)))[]
                                 ^
SyntaxError: invalid syntax

A opção 1 é, de fato, um erro de sintaxe?

1 resposta
solução!

Olá Jefferson, tudo bem com você?

A opção 1 apresentada na postagem gera um erro de sintaxe, quando usamos um segundo conjunto de colchetes após uma declaração de uma lista o Python interpreta que está sendo feito a tentativa de coleta de um objeto (idade) em um determinado índice, como não é passado em qual índice deve ser feito a coleta (o colchete está vazio) é levantado um erro de sintaxe.

Exemplo didático de coleta de objeto em uma lista

idades = 15, 87, 32, 65, 56, 32, 49, 37
idade = list(idades)[2]
print(idade)

Resultado

32

No exemplo acima estamos coletando a idade que está na posição de índice 2, lembrando que a contagem inicia do zero (0) da esquerda para a direita.

No minuto 07:10 da aula Builtins como enumerated, range e desempacotamento automático de tuplas o instrutor mostra que temos duas formas de declararmos uma lista. Sendo elas:

  • Usando a função built-in(nativa) do python, neste caso a list()
  • Usando colchetes para realizar uma declaração direta, com a seguinte sintaxe: []

Quando temos uma função que é do tipo lazy podemos usar a função list() para forçar a geração dos resultados dessa função. Por exemplo, quando usamos a função range() que é do tipo lazy, podemos usar a função list() para forçar a geração dos resultados da função range() e salvá-los em uma lista. Como apresentado abaixo.

idades = [15, 87, 32, 65, 56, 32, 49, 37]
gerados = list(range(len(idades)))
print(gerados)

Resultado

[0, 1, 2, 3, 4, 5, 6, 7]

O segundo modo de declararmos uma lista usando apenas os colchetes [] não irá forçar a geração dos resultados de uma função do tipo lazy, como apresentado abaixo.

idades = [15, 87, 32, 65, 56, 32, 49, 37]
gerados = [range(len(idades))]
print(gerados)

Resultado

[range(0, 8)]

Em resumo temos que, caso seja necessário forçar a geração de valores de uma função do tipo lazy, usaremos a função list().

Para aprimorar ainda mais o seu aprendizado sobre listas no Python, deixo abaixo uma recomendação de artigo para leitura, onde será apresentado as principais operações que podemos fazer usando listas.

Lembre-se que pode contar sempre com o fórum Alura, seja para tirar suas dúvidas ou para compartilhar o seu desenvolvimento.

Fico à disposição.

Abraços e bons estudos.

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!