Используйте from __future__ import division
, чтобы получить требуемое поведение. Затем, в крайнем случае, вы можете сделать что-то вроде
from __future__ import division
strings = ["0.1234", "1/2", "2/3"]
numbers = map(eval, strings)
, чтобы получить список поплавков из ваших строк. Если вы хотите сделать это «правильным» способом, не используйте eval()
, но вместо этого напишите функцию, которая принимает строку, и называет ее float()
, если она не содержит ни одной косой черты, или анализирует строку и делит числитель и знаменатель, если есть косой чертой.
Один из способов сделать это:
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
Тогда просто map(parse_float_string, strings)
получит вам список.
+1. В этом случае eval совершенно ненужен, и я рад, что кто-то (кроме меня, конечно) застрял за то, что правильно. –
Eval не является угрозой безопасности, если ваши сотрудники не являются злонамеренными социопатами. В этом случае вам это не нужно, но это больше не риск для безопасности, чем сам исходный код. –
Очень хорошо. Строка действительно снаружи, поэтому мне нужно идти в безопасное место (и стараться не учиться вредным привычкам). Я надеялся, что вам не придется разбираться, но это не так уж плохо и работает как шарм. – ketorin