Użyj from __future__ import division
, aby uzyskać pożądane zachowanie. Następnie, możesz zrobić coś takiego, jak
from __future__ import division
strings = ["0.1234", "1/2", "2/3"]
numbers = map(eval, strings)
, aby uzyskać listę elementów pływających z łańcuchów. Jeśli chcesz zrobić to w odpowiedni sposób, nie używaj
eval()
, ale zamiast tego napisz funkcję, która akceptuje ciąg znaków i wywołuje na nim
float()
, jeśli nie zawiera ukośnika, lub analizuje ciąg znaków i dzieli licznik i mianownik, jeśli istnieje cięcie w tym.
Jednym ze sposobów, aby to zrobić:
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
Wtedy właśnie map(parse_float_string, strings)
będzie Ci listę.
+1. eval jest zupełnie niepotrzebny w tym przypadku i cieszę się, że ktoś (oprócz mnie, oczywiście) utknął w słuszności tego, co słuszne. –
Eval nie stanowi zagrożenia dla bezpieczeństwa, chyba że Twoi współpracownicy są złośliwymi socjopatami. W tym przypadku nie jest to potrzebne, ale nie stanowi większego zagrożenia dla bezpieczeństwa niż sam kod open source. –
Bardzo dobrze. Sznurek jest rzeczywiście z zewnątrz, więc muszę iść bezpiecznie (i staram się nie uczyć złych nawyków). Miałem nadzieję, że nie będę musiał tego analizować, ale nie jest tak źle i działa jak czar. – ketorin