我正在尝试构建一个函数,该函数返回给定字符串中出现次数最多的字符,并且运行良好,但是如果字符具有相同的频率,如何返回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
我不知道如何检查计数字典元素是否具有相同的频率。
答案 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