将字符串值转换为浮点值

时间:2014-06-25 19:02:01

标签: python

我的小脚本返回一个逗号分隔的10个浮点值列表,循环遍历它们,并将它们保存在变量vals中。

我将这些总结为新的变量'total',如下所示:

total = sum(map(float, vals))

很容易,但通常None作为列表中的一个或多个值出现,

4.234,None,0.2398,None,None,0.0166666666667,None,None,None,None

然后我得到ValueError:

ValueError: could not convert string to float: N

如何将这些None值转换为0,以便值总和而没有错误?

3 个答案:

答案 0 :(得分:3)

total = sum(map(float, filter(None,vals)))

来自文档:

  

请注意,filter(function,iterable)等同于[item for item   in iterable if function(item)] if function is not None和[item for   如果是项目,则迭代项目如果函数为无。

如果vals是一个字符串文字(因为DSM暗示它看起来像是),可以使用ast

>>> vals = '[4.234,None,0.2398,None,None,0.0166666666667,None,None,None,None]'
>>> import ast
>>> vals_list = ast.literal_eval(vals)
>>> vals_list
[4.234, None, 0.2398, None, None, 0.0166666666667, None, None, None, None]

然后,您只需应用sumfilter

即可
>>> total = sum(filter(None,vals_list))
>>> total
4.4904666666667

注意 - 我确实在字符串后附加了方括号,所以如果它们缺少那将是你需要的步骤

答案 1 :(得分:1)

total = sum(float(val) for val in vals if val is not None)

答案 2 :(得分:0)

sum(map(lambda x: float(x) if x else 0.0, vals))