我正在编写一个将从列表中计算模式的函数。
letters = ['a','b','b','c','c']
from collections import Counter
def mode(myList):
n = len(myList)
data = Counter(myList)
get_mode = dict(data)
mode = [k for k, v in get_mode.items() if v == max(list(data.values()))]
if len(mode) == n:
get_mode = "No mode found"
else:
get_mode = ' , '.join(map(str, mode))
return(get_mode)
print (mode(letters))
主要问题-在此列表(字母)的情况下,该函数实际上应打印“无模式”时返回“ b,c”。 任何人都可以解释这种情况的原因以及如何解决吗?
答案 0 :(得分:0)
有一种很多方法可以轻松完成所需的工作:计数器具有.most_common(n)
函数,该函数接受n
,即需要多少结果。
def get_mode(lst):
counter = Counter(lst)
if len(counter) > 1: # ensure at least 2 unique elements
possible_mode, next_highest = counter.most_common(2)
if possible_mode[1] > next_highest[1]:
return possible_mode[0]
return "No mode"
这给我们:
>>> get_mode(['a', 'b']) # Same highest count
'No mode'
>>> get_mode(['a', 'b', 'b']) # Has a mode
'b'
>>> get_mode(['b', 'b']) # Not enough unique elements to calculate a mode
'No mode'