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