Dav*_*Dao 135
您可以使用该max功能和一个键.使用'key'和lambda表达式查看python max函数.
max(set(list), key=list.count)
Run Code Online (Sandbox Code Playgroud)
Chr*_*tts 95
您可以使用具有-esque功能Counter的collections包中提供的mode
from collections import Counter
data = Counter(your_list_in_here)
data.most_common() # Returns all unique items and their counts
data.most_common(1) # Returns the highest occurring item
Run Code Online (Sandbox Code Playgroud)
注意:Counter是python 2.7中的新增功能,在早期版本中不可用.
jab*_*edo 56
Python 3.4包含了方法statistics.mode,所以它很简单:
>>> from statistics import mode
>>> mode([1, 1, 2, 3, 3, 3, 3, 4])
3
Run Code Online (Sandbox Code Playgroud)
您可以在列表中包含任何类型的元素,而不仅仅是数字:
>>> mode(["red", "blue", "blue", "red", "green", "red", "red"])
'red'
Run Code Online (Sandbox Code Playgroud)
Chr*_*ris 26
从一些统计软件(即SciPy和MATLAB)中得到一个叶子,它们只返回最小的最常见值,因此如果两个值经常出现,则返回最小的值.希望一个例子可以帮助:
>>> from scipy.stats import mode
>>> mode([1, 2, 3, 4, 5])
(array([ 1.]), array([ 1.]))
>>> mode([1, 2, 2, 3, 3, 4, 5])
(array([ 2.]), array([ 2.]))
>>> mode([1, 2, 2, -3, -3, 4, 5])
(array([-3.]), array([ 2.]))
Run Code Online (Sandbox Code Playgroud)
你有什么理由不遵循这个惯例吗?
mat*_*urd 23
有很多简单的方法可以在Python中找到列表模式,例如:
import statistics
statistics.mode([1,2,3,3])
>>> 3
Run Code Online (Sandbox Code Playgroud)
或者,您可以通过计数找到最大值
max(array, key = array.count)
Run Code Online (Sandbox Code Playgroud)
这两种方法的问题在于它们不适用于多种模式.第一个返回错误,第二个返回第一个模式.
为了找到集合的模式,您可以使用此函数:
def mode(array):
most = max(list(map(array.count, array)))
return list(set(filter(lambda x: array.count(x) == most, array)))
Run Code Online (Sandbox Code Playgroud)
扩展在列表为空时不起作用的社区答案,这是mode的有效代码:
def mode(arr):
if arr==[]:
return None
else:
return max(set(arr), key=arr.count)
Run Code Online (Sandbox Code Playgroud)
如果您对最小、最大或所有模式感兴趣:
def get_small_mode(numbers, out_mode):
counts = {k:numbers.count(k) for k in set(numbers)}
modes = sorted(dict(filter(lambda x: x[1] == max(counts.values()), counts.items())).keys())
if out_mode=='smallest':
return modes[0]
elif out_mode=='largest':
return modes[-1]
else:
return modes
Run Code Online (Sandbox Code Playgroud)