Porque no puedo eliminar un objeto de una lista en python? – python

Pregunta:


Presento mi código:

numbers = list(range(0, 30, 2))
for i in range(0, 30):
    if numbers[i] % 2 == 0 and numbers[i] == 2:
        numbers[i] = 2 
    if numbers[i] % 2 == 0:
        numbers.remove(i)
print(numbers)

Traceback (most recent call last):
File “F:/python/list.”, line 7, in
numbers.remove(i)
ValueError: list.remove(x): x not in list

Preguntado por: Alvaro Newman gonzales

Francisco Romero

Lo primero en tu lista estás declarando el rango 0-30 con step de 2, es decir, estos tres parámetros:

start: Empieza el número de la secuencia

stop: Genera números hasta, pero no incluye este número

step: Diferencia entre cada número de la secuencia

Por lo tanto, tu le estás indicando que haya una diferencia entre cada número de dos, lo que serían 15 números. Sin embargo, como el último (el 30), no lo incluye, en este caso serían 14 números.

El primer error que veo en tu código es que el bucle que estás realizando lo estás haciendo desde 0 hasta 29 y por lo tanto habrá posiciones para numbers[i] que no existirán.

Por otro lado, le estás intentado borrar un elemento que no existe en tu lista. Si te fijas, tu le estás asignando todo el rato el valor 2 a los elementos en los que incluyes algo. Sin embargo, estas intentando borrar un valor que no existe (1, 2, 3, 4…) ya que tu lista solamente está compuesta de números 2 y tu estás intentado borrar los valores del iterador, los cuales en este caso no almacenas en tu lista y por lo tanto no puede borrar.

creo que el problema esta en lo siguiente:

>>>list(range(0,30,2))

soltara una lista con los siguientes items:

>>>[0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28]

eso es lo que esta almacenado en tu lista. Son solo 15 numeros todos pares. El for i in range (0,30) tiene en cuenta elementos que no son pares : (0,1,2,3…29). Entonces tu error está en que le pides que remueva el indice cuando este no es par.

te doy un ejemplo clarificador: en la primer iteración el indice es 0; cuando llegue al punto de numbers.remove(i); i valdra 0. Por ser el índice; casualmente también es el primer item de tu lista. Sin embargo en la segunda iteracion; i toma el valor 1; numbers[1] tiene asignado el valor dos, el cual segun tu codigo entra en el bloque:

if numbers[i] % 2 == 0:
        numbers.remove(i)

pero.. ¿como va a remover al valor 1? ese numero no esta en la lista.
Espero que te haya servido esta explicación. Saludos.

Fuente

Related Posts:

Con Django ‘str’ object is not callable en class based-views – python django
Pregunta: Tengo este problema cuando quiero acceder a una URL que me dice que es str object is no callable seguramente tengo algo mal en ...
Abrir páginas web en python 3.5.X en la misma ventana – python python-3.x webbrowser
Pregunta: Buenas, he hecho un script para lanzar varias páginas web en una sola ventana, es decir, cada url en una pestaña sin embargo, firefox ...
Publicar proyecto en Python 3.5 con heroku – python django python-3.x
Pregunta: Hola tengo un proyecto hecho con Python 3.5 y Django 1.10 y quisiera publicarlo en HEROKU pero veo que solo soporta Python 2.7, ¿alguien ...
Correcto uso de la app admin de django – python django
Pregunta: Cual es el correcto uso que se le debe dar a la página de administración (django.contrib.admin) en una aplicación en producción. explico mi pregunta. El ...
Cambiar un valor string a un entero – python django ajax
Pregunta: Con el siguiente código quiero hacer una validación donde valide si un dato que voy a ingresar es mayor a otro que ya tengo, ...
Como correr Django en python 3.5 – python python-3.x django
Pregunta: estoy trabajando con Django en python 2.7, para eso hago uso de virtualenv, pip, el conector de mysql, etc. Tengo predefinido python 3.5 en ...
Insertar salto de línea escribiendo en un txt (Python) – python tkinter
Pregunta: Como puedo insertar un salto de línea : archi.write(svnombreRP.get()) Lo hago de la siguientes maneras y no me funciona: No funciona archi.write(svnombreRP.get()'/n') No funciona archi.write(svnombreRP.get()/n) No funciona, me imprime la variable ...
Python elemento IN lista de strings – python python-3.x
Pregunta: tengo la siguiente lista y string: lis = palabra = 'ejemplo' Pero cuando hago palabra in lis Me retorna False. ¿A qué ...
Python: Cómo importar una función desde un archivo – python python-3.x
Pregunta: Estoy teniendo problemas para importar una función: def helloworld(): print("Hello World!") La tengo en un archivo llamado ...
Reasignar valores aleatoriamente a una variable, con una distribución de probabilidad – python python-2.7
Pregunta: Supongamos que hemos declarado una serie de variables (V1, V2, V3, V4) y otra serie de variables (probabilidades): V1="A" V2="B" V3="C" V4="D" Prob_V1=0.2 #probabilidad de reasignar "A" a ...
¿Cómo hacer una tabla de distribución de frecuencias con python? – python python-3.x numpy
Pregunta: Estoy trabajando con distribuciones de frecuencias, hice un script sencillo pero muy redundante que me permite obtener la distribución de frecuencias relativa de ciertos ...
.isalpha() con espacios no funciona en Python 3x – python python-3.x
Pregunta: equipos = print (equipos) print (equipos) print (equipos) print (equipos) while True: equipo = input("n¿Con que equipo te gustaria jugar? ...
¿Cómo hacer una división decimal de un número mayor a 10^308 en Python? – python matemáticas
Pregunta: Intento hacer esta división como parte de un algoritmo de cambio de bases numéricas y me da error de desbordamiento. Python ...
¿Cómo puedo llamar una función de python desde javascript en un proyecto de django? – javascript python django
Pregunta: Estoy haciendo un proyecto que requiere hacer calculadoras complejas en python, necesito pasar datos que ingresa el usuario en la pagina web, a los ...
Django urls.py error – python nodejs django
Pregunta: Buenos días, Estoy intentando meter el 'MEDIA_ROOT' en 'urls.py' pero cuando ejecuto el 'runserver' me aparece el siguiente error: File "C:UsersManuxDesktoppd110libsite-packagesdjangoconfurlsstatic.py", line ...
Tags:

Add a Comment

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *