Duda programa python.

Iniciado por assw1208, 24 Agosto 2020, 18:36 PM

0 Miembros y 1 Visitante están viendo este tema.

assw1208

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.
"COURAGE TODAY,
                              VICTORY TOMORROW "

                            ----------------W--------------

WHK

#1
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.

assw1208

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:.
"COURAGE TODAY,
                              VICTORY TOMORROW "

                            ----------------W--------------