查找非空字符串的百分比

时间:2014-01-16 21:00:34

标签: python

我正在尝试用Python编写代码,找到给定字符串中字母表的百分比。例如,

percent("ab", "aabccdef")应该[("a", 25), ("b", 13)],因为'a'在长度为8的字符串中出现两次,因此其百分比为round(2 / 8)或25。 同样,'b'只出现一次。所以它的百分比是round(1 / 8),或者13。

这是我的代码。有人可以帮我调试吗?

def Percent(alpha, string):
   y = [e for e in string if e == alpha]
   x = len(y)
   return (alpha, round((x / len(string) * 100)))

2 个答案:

答案 0 :(得分:3)

你很接近,但关键的区别是你需要为c中的每个角色alpha计算它:

def percent(alpha, string):
    results = []
    for c in alpha:
        y = [e for e in string if e == c]
        x = len(y)
        results.append((c, round((float(x) / len(string)*100))))
    return results

在您的代码中,您要比较e == alpha,但alpha是字符串ab,而e是字符串中的单个字符。这不会给你你想要的结果。

此外,如果您希望正确计算百分比,则需要将x转换为float。在Python中,如果你写3 / 4,你将获得0而不是0.75。要防止这种情况,您需要将至少一个参数转换为float,这可以通过调用float()来完成。所以你也可以写x / float(len(string)*100)来确保你不会得到一个整数。

答案 1 :(得分:3)

另一种方法是,您可以在列表解析中使用str.count

>>> alpha = 'ab'
>>> string = 'aabccdef'
>>> [(x, string.count(x)/len(string)) for x in alpha]
[('a', 0.25), ('b', 0.125)]