将字符串转换为数字

时间:2011-04-20 22:04:25

标签: python

将字符串转换为数字的简单方法是什么:
从:

['3.65e+03', '1.14e+04', '1.35e+04', '1.46e+04']

为:

[3.65e+03, 1.14e+04, 1.35e+04, 1.46e+04]

感谢。

3 个答案:

答案 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有点像黑客,但它确实很有效。 (具体浮动也是一种很好的方法。)