如何在字符串求和时忽略字母?

1 投票
3 回答
1431 浏览
提问于 2025-05-01 17:24

这个函数接收一个字符串,里面可以包含数字、字母或者特殊符号。

这个函数的任务是返回一个浮点数,表示字符串中所有数字的平均值。如果字符串里没有数字,函数就应该返回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():

撰写回答