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.
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
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.
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!