[Python] sustituir listas

Iniciado por Meta, 12 Noviembre 2010, 13:03 PM

0 Miembros y 1 Visitante están viendo este tema.

Meta

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.
Tutoriales Electrónica y PIC: http://electronica-pic.blogspot.com/

Novlucker

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
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

Novlucker

#2
En realidad a mi se me ocurre otra manera, pero dudo que sea lo que estas buscando

Código (python) [Seleccionar]
a = [0, 1, 2, 3, -4, 5, -6, 8, -9]
a = [(x>0)*x for x in a]
print a
#[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
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

Meta

#3
Cita de: Novlucker en 12 Noviembre 2010, 13:11 PM
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 (python) [Seleccionar]
a = [0, 1, 2, 3, -4, 5, -6, 8, -9]
a = [(x>0)*x for x in a]
print a


Esta parte del código
Código (python) [Seleccionar]
(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.  ;)


Tutoriales Electrónica y PIC: http://electronica-pic.blogspot.com/

Novlucker

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
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

Novlucker

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

Cita de: Meta en 12 Noviembre 2010, 15:45 PM
Esta parte del código
Código (python) [Seleccionar]
(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
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

Meta

Tutoriales Electrónica y PIC: http://electronica-pic.blogspot.com/

omcan

#7
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 (python) [Seleccionar]
print(True + True)
2

print(5 * True)
5

print(3 * False)
0

print(False - True)
-1


Dentro del código:

Código (python) [Seleccionar]
a = [0, 1, 2, 3, -4, 5, -6, 8, -9]
a = [(x>0)*x for x in a]
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].


PUAROT

#8
creo que la solución que buscas al problema mas sencilla y fácil de entender sea:
Código (python) [Seleccionar]
for x in range(len(lista)):
if lista[x] <= 0:
lista[x] = 0


Analiza bien que hace cada linea

Novlucker

Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein