Pergunta sobre pop()

Pergunta sobre pop()

por José Coelho de Pina -
Número de respostas: 4

Salve,

Qual o resultado do trecho de código a seguir?

Python 3.6.1 (default, Mar 22 2017, 06:17:05) 
[GCC 6.3.0 20170321] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> lista = [0, 11, 22, 33, 44, 55, 66]
>>> for i in range(len(lista)):
...     print(lista.pop(i))
... 
Em resposta à José Coelho de Pina

Re: Pergunta sobre pop()

por Isabella de Camargo Nigro -

o resultado sera:

0

22

44

66

Na primeira vez, ao fazer o pop, a lista passa a ter como posição 0 o numero seguinte (11) mas o contador vai ficar com valor 1 então o item seguinte a ser retirado é o 22, e assim por diante. Desse modo, são retirados de forma intercalada. Também tem um fato importante que o i vai chegar em posição alem do que a lista tem ao final pois o for utiliza o tamanho original da lista.

Em resposta à Isabella de Camargo Nigro

Re: Pergunta sobre pop()

por Jefferson Neves dos Santos -

Mas a lista não está sendo alterada constantemente? Isso não afeta o len(lista)? 

Em resposta à Jefferson Neves dos Santos

Re: Pergunta sobre pop()

por Pedro Felipe Higa Felizatto -

Então, acredito que não.

O for i in range(ini,fim,passo) meio que calcula fim-ini na primeira iteração, depois ele faz i andar de passo em passo, sem recalcular o fim-ini

no entanto o código:

i=0

while i<len(lista):

       alguma_coisa()

       i+=1

recalcula a len(lista) a cada vez que ele se pergunta "i<len(lista)?"

 

Pelo menos é o que eu entendi como diferença de while e for

Em resposta à Pedro Felipe Higa Felizatto

Re: Pergunta sobre pop()

por Isabella de Camargo Nigro -

Pelo que eu testei realmente parece ser como o Pedro falou. O pop chega em um out of range e não pode mais ser realizado