[python] 목록 모드 찾기

항목 목록이 주어지면 목록 모드 가 가장 자주 발생하는 항목임을 상기하십시오.

목록의 모드를 찾을 수 있지만 목록에 모드가없는 경우 메시지를 표시하는 함수를 만드는 방법을 알고 싶습니다 (예 : 목록의 모든 항목이 한 번만 표시됨). 함수를 가져 오지 않고이 함수를 만들고 싶습니다. 나는 처음부터 내 자신의 기능을 만들려고 노력하고 있습니다.



답변

max기능과 키를 사용할 수 있습니다 . ‘key’및 lambda expression을 사용하는 python max 함수를 살펴보십시오 .

max(set(lst), key=lst.count)


답변

-esque 기능 이있는 패키지에 Counter제공된 것을 사용할 수 있습니다.collectionsmode

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

참고 : 카운터는 Python 2.7의 새로운 기능이며 이전 버전에서는 사용할 수 없습니다.


답변

Python 3.4에는 메서드가 포함되어 statistics.mode있으므로 간단합니다.

>>> from statistics import mode
>>> mode([1, 1, 2, 3, 3, 3, 3, 4])
 3

목록에는 숫자뿐만 아니라 모든 유형의 요소가 포함될 수 있습니다.

>>> mode(["red", "blue", "blue", "red", "green", "red", "red"])
 'red'


답변

일부 통계 소프트웨어, 즉 SciPyMATLAB 에서 리프를 가져 오면 가장 작은 가장 일반적인 값만 반환되므로 두 값이 똑같이 자주 발생하면 가장 작은 값이 반환됩니다. 예제가 도움이되기를 바랍니다.

>>> 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.]))

이 대회를 따를 수없는 이유가 있습니까?


답변

다음과 같이 Python에서 목록 모드를 찾는 간단한 방법이 많이 있습니다.

import statistics
statistics.mode([1,2,3,3])
>>> 3

또는 개수로 최대 값을 찾을 수 있습니다.

max(array, key = array.count)

이 두 가지 방법의 문제점은 여러 모드에서 작동하지 않는다는 것입니다. 첫 번째는 오류를 반환하고 두 번째는 첫 번째 모드를 반환합니다.

세트의 모드를 찾기 위해 다음 기능을 사용할 수 있습니다.

def mode(array):
    most = max(list(map(array.count, array)))
    return list(set(filter(lambda x: array.count(x) == most, array)))


답변

목록이 비어있을 때 작동하지 않는 커뮤니티 답변 확장, 다음은 모드에 대한 작업 코드입니다.

def mode(arr):
        if arr==[]:
            return None
        else:
            return max(set(arr), key=arr.count)


답변

가장 작은 모드, 가장 큰 모드 또는 모든 모드에 관심이있는 경우 :

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