我的小脚本返回一个逗号分隔的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,以便值总和而没有错误?
答案 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]
然后,您只需应用sum
和filter
>>> 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))