Use from __future__ import division
para obtener el comportamiento que desea. Luego, en caso de necesidad, se puede hacer algo como
from __future__ import division
strings = ["0.1234", "1/2", "2/3"]
numbers = map(eval, strings)
para obtener una lista de los flotadores de sus cadenas. Si quiere hacer esto de la manera "correcta", no use eval()
, sino que escriba una función que acepte una cadena y llame al float()
si no contiene una barra, o analiza la cadena y divide el numerador y el denominador si hay una barra en ella.
Una forma de hacerlo:
def parse_float_string(x)
parts = x.split('/', 1)
if len(parts) == 1:
return float(x)
elif len(parts) == 2:
return float(parts[0])/float(parts[1])
else:
raise ValueError
A continuación, sólo map(parse_float_string, strings)
le conseguirá su lista.
+1. eval es completamente innecesario en este caso, y estoy contento de que alguien (que no sea yo, por supuesto) se haya opuesto a lo que es correcto. –
Evaluar no es un riesgo de seguridad a menos que sus compañeros de trabajo sean sociópatas malintencionados. No lo necesita en este caso, pero no es más un riesgo de seguridad que el código abierto en sí mismo. –
Muy bien. La cuerda es de verdad de afuera, así que necesito ir a salvo (y tratar de no aprender los malos hábitos). Esperaba no tener que analizarlo, pero esto no es tan malo y funciona como un encanto. – ketorin