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.
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!