将字符串转换为数字的简单方法是什么:
从:
['3.65e+03', '1.14e+04', '1.35e+04', '1.46e+04']
为:
[3.65e+03, 1.14e+04, 1.35e+04, 1.46e+04]
感谢。
答案 0 :(得分:4)
map(float, your_list)
或
[float(x) for x in your_list]
更新有关为何使用“使用小数”的不合格建议不是一个好主意的解释,请参阅my answer to another question。
答案 1 :(得分:4)
首先,我希望您了解limitations在我们当前的架构中准确表示浮点。
转换的简单方法就是这个。
>>> s = ['3.65e+03', '1.14e+04', '1.35e+04', '1.46e+04']
>>> map(float,s)
>>> [3650.0, 11400.0, 13500.0, 14600.0]
但是,float会将它们舍入到最接近的值,只要值相同,它的表示就无关紧要了。有时,这些值可以具有接近相等的表示,具有相同的值(几乎),例如
>>> s = ['3.65e+93', '1.14e+04', '1.35e+04', '1.46e+04']
>>> map(float,s)
[3.6500000000000001e+93, 11400.0, 13500.0, 14600.0]
更新 - 请参阅John Machin对此行为/ repr的评论。
但是如果你想要精确的表示,例如如果你正在处理涉及金钱的计算,那么你可能想要使用Decimal
类型而不是浮点数,它可以用于所有目的,其行为与你的浮点数相同。
>>> from decimal import Decimal
>>> map(Decimal,s)
[Decimal('3.65E+93'), Decimal('1.14E+4'), Decimal('1.35E+4'), Decimal('1.46E+4')]
答案 2 :(得分:-1)
numbers = [eval(s) for s in ['3.65e+03', '1.14e+04', '1.35e+04', '1.46e+04']]
eval有点像黑客,但它确实很有效。 (具体浮动也是一种很好的方法。)