Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: Meta en 12 Noviembre 2010, 13:03



Título: [Python] sustituir listas
Publicado por: Meta en 12 Noviembre 2010, 13:03
En el ejercicio 226) del libro en pdf página 175 que se puede ver en mi firma abajo...

Por lo que dice debo hacer:
Citar
- Crea aualquier lista con algunos números  negativo.
- Sustituir cualquier elemento negativo por 0.

Primer paso:
ta = [0, 1, 2, 3, -4, 5, -6, 8, -9]

Iba a usar for i in lista, pero la idea es sustituirla. Lo iba hacer uno a uno manualmente a modificar los negativos por los 0 y no creo que sea lo recomendado.

Ejemplo:
ta = [0, 1, 2, 3, -4, 5, -6, 8, -9]
ta = [-4] = 0
>>> a
resultado:
lista = [0, 1, 2, 3, 0, 5, -6, 8, -9]
Y así con los demás números negativos. Esto de hacerlo manual no creo que sea lo  correcto, debe haber alguna manera de como hacerlo de una pasada. Por ejemplo:

Si detecta en una lista un número negativo, modificar esa lista sustituyento los números negativos por 0.

Eso es lo que no se si se puede hacer. Por ahora manualmente uno a uno si me sale, aunque así es tedioso.


Título: Re: [Python] sustituir listas
Publicado por: Novlucker en 12 Noviembre 2010, 13:11
No se como es que funciona eso que pones, lo de ta = [-4] = 0 debería de partirse con un "SyntaxError: can't assign to literal"

Y si es con un for in

Saludos


Título: Re: [Python] sustituir listas
Publicado por: Novlucker en 12 Noviembre 2010, 13:42
En realidad a mi se me ocurre otra manera, pero dudo que sea lo que estas buscando

Código
  1. a = [0, 1, 2, 3, -4, 5, -6, 8, -9]
  2. a = [(x>0)*x for x in a]
  3. print a
  4. #[0, 1, 2, 3, 0, 5, 0, 8, 0]
Supongo que eso es menos tedioso, pero también puede que lo entiendas menos :xD

Saludos


Título: Re: [Python] sustituir listas
Publicado por: Meta en 12 Noviembre 2010, 15:45
No se como es que funciona eso que pones, lo de ta = [-4] = 0 debería de partirse con un "SyntaxError: can't assign to literal"

Y si es con un for in

Saludos


Lo de ta[-4] = 0, querio decirlo así. ejjeje y funciona pero es manual.

Tu código funciona y no hace falta un int.
Código
  1. a = [0, 1, 2, 3, -4, 5, -6, 8, -9]
  2. a = [(x>0)*x for x in a]
  3. print a

Esta parte del código
Código
  1. (x>0)*x
Por lo que estoy viendo x del índice del "for in" comprueba si es mayor que cero, después multiplica por x cuyo resultado da cero.

¿Me equivoco?

Tu código funciona, ahora quiero aprender cómo funciona para aprender si no te importa.  ;)




Título: Re: [Python] sustituir listas
Publicado por: Novlucker en 12 Noviembre 2010, 15:49
Es que eso tampoco funciona :xD
Mira, a ti te esta funcionando porque justamente el elemento que quieres modificar coincide con el que esta en el índice 4, cambia en el ta ese -4 por un -14 y verás que no te funciona. Lo que pasa es que como las listas no aceptan indices negativos simplemente lo ignora y revisa el índice 4, no es que este modificando el valor -4

Saludos


Título: Re: [Python] sustituir listas
Publicado por: Novlucker en 25 Noviembre 2010, 11:53
Hasta ahora veo que habías modificado :silbar:
Efectivamente el code funciona aún sin el int, en realidad no se por que lo puse :xD, ya que en los calculos los True y False no hace falta convertirlos, puedes hacer perfectamente True*5 :P

Esta parte del código
 
Código
  1. (x>0)*x
Por lo que estoy viendo x del índice del "for in" comprueba si es mayor que cero, después multiplica por x cuyo resultado da cero.

Lo que hago es revisar si es mayor a cero, si es mayor a cero da True, y True por un numero es igual al mismo numero (True*5=5), si es menor a cero da False, y como False es cero, cero por cualquier cosa es cero. De este modo los números negativos quedan como ceros en la sustitución.

Saludos


Título: Re: [Python] sustituir listas
Publicado por: Meta en 25 Noviembre 2010, 12:11
Gracias por la información.


Título: Re: [Python] sustituir listas
Publicado por: omcan en 5 Mayo 2017, 09:08
En realidad el programa almacena los valores booleanos en un bit como un 1 o 0; esta característica yo creo es conocida por todos, pero Novlucker muestra que también se permite usar los booleanos True o False para operar matemáticamente como si fueran unos y ceros:

Código
  1. print(True + True)
  2. 2
  3.  
  4. print(5 * True)
  5. 5
  6.  
  7. print(3 * False)
  8. 0
  9.  
  10. print(False - True)
  11. -1
  12.  

Dentro del código:

Código
  1. a = [0, 1, 2, 3, -4, 5, -6, 8, -9]
  2. a = [(x>0)*x for x in a]
  3. print a

la sentencia (x>0) tiene la función de devolver un booleano True o False que es interpretado como un 1 o un 0 y usado para multiplicar a "x"; y es el resultado de esa operación, para cada valor de x, la que va dando la serie de resultados: [0, 1, 2, 3, 0, 5, 0, 8, 0].



Título: Re: [Python] sustituir listas
Publicado por: PUAROT en 5 Mayo 2017, 11:24
creo que la solución que buscas al problema mas sencilla y fácil de entender sea:
Código
  1. for x in range(len(lista)):
  2. if lista[x] <= 0:
  3. lista[x] = 0

 Analiza bien que hace cada linea


Título: Re: [Python] sustituir listas
Publicado por: Novlucker en 17 Septiembre 2017, 08:58
Solo 7 años tarde :rolleyes: :silbar: