Foros del Web » Programando para Internet » Python »

Que esta mal?

Estas en el tema de Que esta mal? en el foro de Python en Foros del Web. Definir una lista con edades de personas, luego borrar todos los elementos que sean menores a 18. Yo escribi esto: Código: edades=[12,21,28,16,19,25,15] indice=0 for elemento ...
  #1 (permalink)  
Antiguo 09/02/2012, 13:08
Avatar de iivo94  
Fecha de Ingreso: febrero-2011
Ubicación: Argentina
Mensajes: 281
Antigüedad: 13 años, 2 meses
Puntos: 3
Que esta mal?

Definir una lista con edades de personas, luego borrar todos los elementos que sean menores a 18.

Yo escribi esto:
Código:
edades=[12,21,28,16,19,25,15]
indice=0
for elemento in edades:
    if elemento<18:
        del(elemento[indice])
    else:
        indice=indice+1
print edades
y me tira este error:

Status: 500 Internal Server Error Content-Type: text/html; charset=utf-8 Cache-Control: no-cache Expires: Fri, 01 Jan 1990 00:00:00 GMT Content-Length: 441
Traceback (most recent call last):
File "/base/python_runtime/python_lib/versions/1/google/appengine/ext/webapp/_webapp25.py", line 703, in __call__
handler.post(*groups)
File "/base/data/home/apps/pythonya/1.339838402016280589/pythonya.py", line 48, in post
exec(compile(x,'xx.py','exec'))
File "xx.py", line 7, in <module>
TypeError: 'int' object does not support item deletion
  #2 (permalink)  
Antiguo 09/02/2012, 13:22
Avatar de Carlangueitor
Moderador ლ(ಠ益ಠლ)
 
Fecha de Ingreso: marzo-2008
Ubicación: México
Mensajes: 10.037
Antigüedad: 16 años, 1 mes
Puntos: 1329
Respuesta: Que esta mal?

El problema es que estás intentando borrar un indice de "elemento" en lugar de ser un indice de "edades":

Código Python:
Ver original
  1. edades=[12,21,28,16,19,25,15]
  2. indice=0
  3. for elemento in edades:
  4.     if elemento<18:
  5.         del(edades[indice])
  6.     else:
  7.         indice=indice+1
  8. print edades

Saludos
__________________
Grupo Telegram Docker en Español
  #3 (permalink)  
Antiguo 09/02/2012, 13:29
Avatar de iivo94  
Fecha de Ingreso: febrero-2011
Ubicación: Argentina
Mensajes: 281
Antigüedad: 13 años, 2 meses
Puntos: 3
Respuesta: Que esta mal?

claro, ahora funciona, gracias.. igualmente funciona mal porque me muestra algunas edades menores a 18 :l
  #4 (permalink)  
Antiguo 09/02/2012, 13:30
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años
Puntos: 1360
Respuesta: Que esta mal?

Lo quieres hacer es muy simple.

Código Python:
Ver original
  1. edades = [12, 21, 28, 16, 19, 25, 15]
  2. edades = filter(lambda x: x >= 18, edades)
  3. print edades

Código Python:
Ver original
  1. edades = [12, 21, 28, 16, 19, 25, 15]
  2. edades = [edad for edad in edades if edad >= 18]
  3. print edades

Checa el los aportes de compresión de listas y en las FAQs sobre map, filter y reduce.
  #5 (permalink)  
Antiguo 09/02/2012, 13:37
Avatar de iivo94  
Fecha de Ingreso: febrero-2011
Ubicación: Argentina
Mensajes: 281
Antigüedad: 13 años, 2 meses
Puntos: 3
Respuesta: Que esta mal?

pero en mi cursito no me enseñaron esas cosas todavia D:
  #6 (permalink)  
Antiguo 09/02/2012, 15:59
 
Fecha de Ingreso: octubre-2011
Ubicación: conoceme y averigualo
Mensajes: 64
Antigüedad: 12 años, 5 meses
Puntos: 2
Respuesta: Que esta mal?

Si lo que estas haciendo mal es del(elementos[indice]), tambien estoy aprendiendo asi que Aqui tienes otra solución:


Código:
edades = [12 ,21, 28, 16, 19, 25, 15]
indice = 0
for x in edades:
    if x < 18:
        del(edades[indice])
    else:
        indice += 1
print edades
  #7 (permalink)  
Antiguo 09/02/2012, 16:33
Avatar de mcun  
Fecha de Ingreso: octubre-2010
Ubicación: tras la pantalla
Mensajes: 466
Antigüedad: 13 años, 6 meses
Puntos: 55
Respuesta: Que esta mal?

en el libro Pythom para todos esta muy bien explicado lo de las listas por comprensión que menciona razpeitia
  #8 (permalink)  
Antiguo 10/02/2012, 13:26
Avatar de iivo94  
Fecha de Ingreso: febrero-2011
Ubicación: Argentina
Mensajes: 281
Antigüedad: 13 años, 2 meses
Puntos: 3
Respuesta: Que esta mal?

Cita:
Iniciado por Okapps Ver Mensaje
Si lo que estas haciendo mal es del(elementos[indice]), tambien estoy aprendiendo asi que Aqui tienes otra solución:


Código:
edades = [12 ,21, 28, 16, 19, 25, 15]
indice = 0
for x in edades:
    if x < 18:
        del(edades[indice])
    else:
        indice += 1
print edades
ahi sigue mostrando menores a 18 :P, lo q hice fue usar bucle while para recorrer la lista envez de for y ya funciona...

Código:
edades=[22,62,17,14,33,17,25]
indice=0
while indice<len(edades):
    if edades[indice]<18:
        del(edades[indice])
    else:
        indice=indice+1
print edades
Cita:
Iniciado por mcun Ver Mensaje
en el libro Pythom para todos esta muy bien explicado lo de las listas por comprensión que menciona razpeitia
gracias ahora voy a ver ese libro tmb...
  #9 (permalink)  
Antiguo 27/03/2012, 22:02
Avatar de shujidan  
Fecha de Ingreso: abril-2011
Mensajes: 121
Antigüedad: 13 años
Puntos: 5
Respuesta: Que esta mal?

Perdon por responder tan tarde pero no habia entrado desde hace mucho a este foro y quizas ya no te interese pero el error que vi en tu codigo es el siguiente

Código Python:
Ver original
  1. edades=[12,21,28,16,19,25,15]
  2. indice=0
  3. for elemento in edades:
  4.     if elemento<18:
  5.         del(elemento[indice]) //ELEMENTO NO ES EL ARRAY SINO UN ELEMENTO DEL ARRAY, debes accesar a edades[indice]
  6.     else:
  7.         indice=indice+1
  8. print edades

Con el else le estas diciendo a tu programa que cuando tu elemento sea menor a 18 se borre de la lista y en otro caso avance (es decir que cuando sea mayor o igual a 18 avance) por lo tanto cuando el elemento se borra ya no entra en el caso que debe avanzar el indice

Por ejemplo si un elemento es mayor a 18 el indice avanza correctamente pero cuando es menor entra primero en la condicion en la que debe borrar el elemento y a ninguna otra:

Código Python:
Ver original
  1. edades=[12,21,28,16,19,25,15]
  2. indice=0
  3. for elemento in edades:
  4.     if elemento<18:
  5.         del(edades[indice])
  6.     indice=indice+1 //el aumento del indice debe estar fuera de la condicion "if" (se debe ejecutar en cualquier caso) o de otra forma el indice no avanza (solo el elemento)
  7. print edades

Última edición por shujidan; 27/03/2012 a las 22:16
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:03.