如何比较字符频率并返回出现次数最多的字符?

时间:2019-07-07 10:03:20

标签: python-3.x

我正在尝试构建一个函数,该函数返回给定字符串中出现次数最多的字符,并且运行良好,但是如果字符具有相同的频率,如何返回None

喜欢输入:'abac'
预期输出为:'a'

,并输入:'abab'
预期输出为:None

我尝试使用字典来存储字符频率,然后返回具有最大值的元素。

def most_occuring_char(str1):
    count = {}
    max = 0
    c = ''

    for char in str1:
        if char in count.keys():
            count[char]+=1
        else:
            count[char] = 1

    for char in str1:
        if max < count[char]:
            max = count[char]
            c = char

    return c

我不知道如何检查计数字典元素是否具有相同的频率。

3 个答案:

答案 0 :(得分:0)

一旦有了包含每个字符计数的字典(在第一个for循环之后),您就可以检查它以确定某些计数是否相同。

如果只希望在所有字符数都相同时返回None,则可以从字典中提取值(即字符数),对它们进行排序以使其按数字顺序排列,然后比较第一个和最后一个值。由于它们是排序的,因此如果第一个和最后一个值相同,则所有中间值也将相同。可以使用以下代码完成此操作:

count_values = sorted(count.values())
if count_values[0] == count_values[-1]: return None

如果希望在没有单个最频繁出现的字符时返回None,则可以将排序列表的最后一个值与倒数第二个进行比较。如果这些相等,则最经常出现两个或多个字符。此代码与上面的代码非常相似。

count_values = sorted(count.values())
if count_values[-1] == count_values[-2]: return None

答案 1 :(得分:0)

您可以使用collections.Counter对字典进行计数。
基本上,您只需要添加检查以查看最大计数是否唯一(如果是,则返回具有最大出现次数的char)(如果是,则返回3):

None

答案 2 :(得分:0)

另一种可能性:

SleepVar1 = Sleep, 2000

:*:svar::
SleepVar1 
msgbox, You slept 2 seconds
return