如何在字符串求和时忽略字母?
这个函数接收一个字符串,里面可以包含数字、字母或者特殊符号。
这个函数的任务是返回一个浮点数,表示字符串中所有数字的平均值。如果字符串里没有数字,函数就应该返回0.0。
举个例子:avgDigs('123a456')
这个调用应该返回 3.5
到目前为止,我有
def avgDigs (st):
count = 0
total = 0
for i in st:
if st.isdigit():
count += int(i)
total += 1
print float(count)/total
我该怎么忽略字母,只加上数字呢?
3 个回答
0
你也可以直接把数字过滤掉:
In [42]: filter(str.isdigit, '123a456')
Out[42]: '123456'
这样,值就可以直接转换成浮点数了,
In [43]: map(float, filter(str.isdigit, '123a456'))
Out[43]: [1.0, 2.0, 3.0, 4.0, 5.0, 6.0]
而且Python提供了一个函数来计算平均值:
In [44]: mean(map(float, filter(str.isdigit, '123a456')))
Out[44]: 3.5
0
可能更符合Python的风格。
import re
def avgDigs(st):
digits = re.findall("[0-9]", st)
print reduce(lambda x,y:float(x)+float(y) ,digits,0)/len(digits)
4
你需要检查字符串中的当前项是否是数字,而不是检查整个字符串。所以你需要
if i.isdigit():
而不是
if st.isdigit():