如何返回列表中出现次数最多的元素?

2Xc*_*ion 5 python list python-3.x

所以我试图创建一个函数,它将接受一个参数 numlist(一个非空的数字列表),并返回在 numlist 中出现频率最高的数字的排序列表。

到目前为止,我已经设法创建了一个字典(数字作为键,它们的频率作为值)。但是我还是想找出其中哪一个值最大并返回。问题是我不知道如何比较它们。现在有一些像这样的单线

max(stats, key=stats.get)
Run Code Online (Sandbox Code Playgroud)

但是如果有多个值满足该要求呢?

mode([5, 1, 1, 5])
#I'm guessing this should return [1, 5] if sorted...
Run Code Online (Sandbox Code Playgroud)

你会怎么处理?感谢您对此的任何帮助!

这是我的代码:

def mode(numlist):

    mylist = numlist
    dic = {}

    for num in mylist:
        if num in dic:
            dic[num] += 1
        else:
            dic[num] = 1
     # try to get the max value and return them in a set form like [1, 0]    
Run Code Online (Sandbox Code Playgroud)

sty*_*ane 5

您可以使用Counter 返回dict类似对象的对象,其中元素存储为字典键,并且它们的计数存储为字典值。

from collections import Counter

def mode(my_list):
    ct = Counter(my_list)
    max_value = max(ct.values())
    return sorted(key for key, value in ct.items() if value == max_value)
Run Code Online (Sandbox Code Playgroud)

演示:

In [46]: mode([5, 1, 1, 5])
Out[46]: [1, 5]
Run Code Online (Sandbox Code Playgroud)


zon*_*ndo 0

您可以使用collections.Counter

from collections import Counter

def mode(num_list):
    max_value = float('-inf')
    maxes = None
    for key, value in Counter(num_list).items():
        if value == max_value:
            maxes.add(key)
        elif value > max_value:
            max_value = value
            maxes = {key}

    return maxes


print(mode([1, 3, 3, 1, 2]))
Run Code Online (Sandbox Code Playgroud)

如果顺序很重要,请使用[key]代替{key}maxes.append(key)代替maxes.add(key)