Edited at

リストの最頻値を求めたいがstatistics.mode()が例外を返してくる


statistics.mode()メソッドはリストの最頻値を返してくれます


>>> import statistics
>>> l = [1,1,2,3] #最頻値は1
>>> statistics.mode(l)
1

OKですね

ところがリスト内に最頻値が複数存在すると,例外を返す仕様となっています

>>> l = [1,1,2,2,3] #最頻値は1と2

>>> statistics.mode(l)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/anaconda3/lib/python3.6/statistics.py", line 507, in mode
'no unique mode; found %d equally common values' % len(table)
statistics.StatisticsError: no unique mode; found 2 equally common values
>>>


どうしよう

collections.Counter()メソッドが使えそうです

>>> l

[1, 1, 2, 2, 3]
>>> import collections
>>> collections.Counter(l).most_common() #(要素,出現回数)を出現回数順に並び替えたタプルを返す
[(1, 2), (2, 2), (3, 1)]

とりあえず何か一つ最頻値が欲しい場合は,

>>> collections.Counter(l).most_common()[0][0]

1

で良さそうです