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.
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
En realidad a mi se me ocurre otra manera, pero dudo que sea lo que estas buscando
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
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.
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
(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. ;)
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
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
(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
Gracias por la información.
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:
print(True + True)
2
print(5 * True)
5
print(3 * False)
0
print(False - True)
-1
Dentro del código:
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].
creo que la solución que buscas al problema mas sencilla y fácil de entender sea:for x in range(len(lista)):
if lista[x] <= 0:
lista[x] = 0
Analiza bien que hace cada linea
Solo 7 años tarde :rolleyes: :silbar: