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

sobre list comprehension

mais uma dúvida dessa aula:

no codigo: %time for _ in range(100): py_list = [x*2 for x in py_list]

o que está acontecendo? porque não precisa de identação?

até agora nao entendi como faz list comprehension das vezes que foram feitas.

1 resposta
solução!

Olá Roberval, tudo bem? Espero que sim!

Em relação à indentação, ela só é necessária quando o bloco de código tiver duas ou mais linhas. Portanto:

for _ in range(100):
    py_list = [x*2 for x in py_list]

Retorna o mesmo resultado que:

for _ in range(100): py_list = [x*2 for x in py_list]

Como o py_list = [x*2 for in py_list] possui apenas uma linha, pode ser colocado na mesma linha que o for. Caso tivesse duas linhas de código ou mais, não iria funcionar.

Vamos entender agora como funciona o list comprehension para esse caso:

A variável py_list é uma lista criada a partir do código py_list = list(range(1000000)), portanto tem valores de 0 a 1.000.000, com exceção do 1 milhão. A list comprehension [x*2 for x in py_list] que foi armazenada novamente em py_list equivale ao código:

lista = []
for x in py_list:
    x*=2
    lista.append(x)

Ou seja, para cada elemento x de py_list, vamos criar uma nova lista, que terá valores x * 2, o dobro dos valores da lista original. Aqui se encerra o funcionamento da list_comprehension.

Como essa lista foi salva na variável py_list, ao fazer for _ in range(100): py_list = [x*2 for x in py_list], serão executadas 100 vezes o list_comprehension, dessa forma py_list será multiplicada por 2, depois multiplicada por 2, e assim por diante até que seja multiplicada por 2 uma quantidade 100 de vezes.

Qualquer dúvida estou à disposição. Bons estudos!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software