Test Foro de elhacker.net SMF 2.1

Programación => Scripting => Mensaje iniciado por: assw1208 en 24 Agosto 2020, 18:36 PM

Título: Duda programa python.
Publicado por: assw1208 en 24 Agosto 2020, 18:36 PM
Tengo un problema desde ayer, al crear un programa que elimina los elementos pares de una lista. No elimina todos los números pares de la lista y por más que reviso el código no doy con una solución el código es:


lista = [13,26, 24, 15, 28, 91, 63]
print(lista)
indice = 0

for i in lista:
   #print(indice)
   if i %2 == 0:
       print("if : ", indice, "numero :", i)
       lista.pop(indice)
   indice += 1


print( "\n \n",lista)

La lista que me devuelve después es [13,24,28,91,63]... y ni idea de porque pasa esto.


Sé que haciendo un apaño como este ya estaría:

lista = [13,26, 24, 15, 28, 91, 63]
lista_impares = []


for i in lista:
   if i %2 != 0:
       lista_impares.append(i)



Pero me gustaría saber en que estoy fallando.
Estaría muy agradecido a cualquiera que me supiese decir donde estoy fallando.
Muchas gracias de antemano.
Título: Re: Duda programa python.
Publicado por: WHK en 24 Agosto 2020, 19:24 PM
Muy facil amigo, cuando, haces pop para retirar un elemento de un array este se transforma y se reordenan los índices, pero mientras lo haces estás iterando, por eso estás omitiendo todos los valores que siguen despues de un valor eliminado ya que se corre el índice. A demás, un array de python cuenta con la función remove(), no hace falta hacerle un pop(), asi no necesitas índices, pero de todas maneras puedes hacerlo más fácil:

lista = [13, 26, 24, 15, 28, 91, 63]
lista = [i for i in lista if i % 2 != 0]
print(lista)


$ python3 test.py
[13, 15, 91, 63]


Saludos.
Título: Re: Duda programa python.
Publicado por: assw1208 en 24 Agosto 2020, 22:35 PM
Muchisimas gracias tanto por la explicación como por el código, nunca se me habría ocurrido hacer algo así dentro de una lista  :o :o. Sin duda me hace falta muchísimo mas estudio de este tema   :laugh:.