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!