Foro de elhacker.net

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:

Código:
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:
Código:
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:

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

Código:
$ 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:.