항목 목록이 주어지면 목록 모드 가 가장 자주 발생하는 항목임을 상기하십시오.
목록의 모드를 찾을 수 있지만 목록에 모드가없는 경우 메시지를 표시하는 함수를 만드는 방법을 알고 싶습니다 (예 : 목록의 모든 항목이 한 번만 표시됨). 함수를 가져 오지 않고이 함수를 만들고 싶습니다. 나는 처음부터 내 자신의 기능을 만들려고 노력하고 있습니다.
답변
max
기능과 키를 사용할 수 있습니다 . ‘key’및 lambda expression을 사용하는 python max 함수를 살펴보십시오 .
max(set(lst), key=lst.count)
답변
-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
참고 : 카운터는 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'
답변
일부 통계 소프트웨어, 즉 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.]))
이 대회를 따를 수없는 이유가 있습니까?
답변
다음과 같이 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