如何返回频率高于阈值的字符数

时间:2012-03-27 09:34:58

标签: python statistics

如何打印频率高于阈值的大写字母数(在教程中)?

作业问题是:

  

您的任务是编写一个函数,该函数将单个非负数作为输入,并返回(不打印)计数严格大于函数参数的计数中的字符数。您的函数应该被称为freq_threshold。

我的回答是:

mobyDick = "Blah blah A B C A RE."

def freq_threshold(threshold):
    tally = {}
    for char in mobyDick:
        if char in tally:
            tally[char] += 1
        else:
            tally[char] = 1

    for key in tally.keys():
        if key.isupper():
            print tally[key],tally.keys
            if threshold>tally[key]:return threshold
            else:return tally[key]

它不起作用,但我不知道它出错了。

4 个答案:

答案 0 :(得分:1)

您的任务是返回满足条件的字符数。你试图返回一些角色的出现次数。试试这个:

result = 0
for key in tally.keys():
  if key.isupper() and tally[key] > threshold:
    result += 1
return result 

您可以使此代码更加pythonic。我这样写它是为了让它更清晰。

答案 1 :(得分:1)

你计算每个角色数量的部分很好:

>>> pprint.pprint ( tally )
{' ': 5,
 '.': 1,
 'A': 2,
 'B': 2,
 'C': 1,
 'E': 1,
 'R': 1,
 'a': 2,
 'b': 1,
 'h': 2,
 'l': 2,
 '\x80': 2,
 '\xe3': 1}

错误在于您如何总结统计数据。

  • 您的作业要求您在字符串中打印超过 n 次的字符数。
  • 您要归还的内容是 n 特定字符出现的次数。

您需要逐步完成字符和字符计数,计算有多少字符的频率超过 n

答案 2 :(得分:0)

不要重新发明轮子,而是使用counter object,例如:

>>> from collections import Counter
>>> mobyDick = "Blah blah A B C A RE."
>>> c = Counter(mobyDick)
>>> c
Counter({' ': 6, 'a': 2, 'B': 2, 'h': 2, 'l': 2, 'A': 2, 'C': 1, 'E': 1, '.': 1, 'b': 1, 'R': 1})

答案 3 :(得分:0)

from collections import Counter
def freq_threshold(s, n):
    cnt = Counter(s)
    return [i for i in cnt if cnt[i]>n and i.isupper()]

重新发明轮子:

def freq_threshold(s, n):
    d = {}
    for i in s:
        d[i] = d.get(i, 0)+1
    return [i for i in d if d[i]>n and i.isupper()]