我正在通过函数传递一些困惑的数据。下面的函数尝试取平均值。有时列表中的项目不是数字,并且会引发错误。
我尝试使用正则表达式来替换非数字字符,但有些东西仍然无法通过。每当出现错误值(由于数据困惑)时,我只想为列表中的该项目记录一个 0。
def mean(vals):
if len(vals) == 0:
return 0.0
for val in vals:
val = re.sub("[^0-9.]", "", str(val))
print vals
vals = [float(val) for val in vals]
return sum(vals) / len(vals)
我打印 vals 列表只是为了看看我在哪里抛出了错误。最后的 vals 列表是:
['</a>']
鉴于我已经对非数字或句点的所有内容进行了正则表达式处理,这怎么可能?
最佳答案
不要使用 re.sub
,而是使用 try
/ except
...
def mean(vals):
total = 0.0
length = 0
for val in vals:
try:
total += float(val)
except (ValueError, TypeError):
pass
length += 1
return total / length if length else 0.0
关于python - 对一些杂乱的数据进行迭代和平均,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30674790/