Python中的计算模式

时间:2019-04-02 21:40:04

标签: python python-3.x

我正在编写一个将从列表中计算模式的函数。

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”。 任何人都可以解释这种情况的原因以及如何解决吗?

1 个答案:

答案 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'