目前,我正在使用经典的列表元素计数方法max(lst,key=lst.count)
。但是,如果两个不同元素的最大出现次数相等,例如 lst = [1,1,2,2]
,max
函数只返回一个元素。在我们的例子中,它将返回 1
或 2
。但我需要一个函数可以同时返回 1
和 2
。
目前,我正在使用经典的列表元素计数方法max(lst,key=lst.count)
。但是,如果两个不同元素的最大出现次数相等,例如 lst = [1,1,2,2]
,max
函数只返回一个元素。在我们的例子中,它将返回 1
或 2
。但我需要一个函数可以同时返回 1
和 2
。
从列表中构建一个Counter
,并使用列表推导式获取匹配最高计数的项目:
from collections import Counter
lst = [1,1,2,2]
c = Counter(lst)
maximums = [x for x in c if c[x] == c.most_common(1)[0][1]]
print(maximums)
# [1, 2]
lst = [1,1,2,2,3,4]
max_count = max([lst.count(i) for i in set(lst)])
max_count_values = [i for i in set(lst) if lst.count(i)==max_count]
list.count
。 - Moses Koledoye这是一个很好的问题,因为使用 scipy.stats.mode
找到列表中最常见的单个数字是微不足道的,但如果您想找到所有不同的模式,则没有什么简单的方法。
对于每个值调用 list.count
是不必要的昂贵的,因为这需要 O(n^2)
时间,但计算每个元素的计数只需要 O(n)
时间。
以下是使用 NumPy 的解决方案:
>>> import numpy as np
>>> lst = [1,1,2,2,3]
>>> values, counts = np.unique(lst, return_counts=True)
>>> values[np.argwhere(counts == counts.max())].flatten()
array([1, 2])
set(x for x in lst if lst.count(x)==max(lst.count(x) for x in lst))