3

基本的に、リストに複数のモードがあるかどうかに関係なく、Python のリストからモード (最も頻繁に発生する番号) を生成する方法を理解する必要があります。

このようなもの:

def print_mode (thelist):
  counts = {}
  for item in thelist:
    counts [item] = counts.get (item, 0) + 1
  maxcount = 0
  maxitem = None
  for k, v in counts.items ():
    if v > maxcount:
      maxitem = k
      maxcount = v
  if maxcount == 1:
    print "All values only appear once"
  if counts.values().count (maxcount) > 1:
    print "List has multiple modes"
  else:
    print "Mode of list:", maxitem

しかし、「すべての値は一度だけ表示されます」または「リストには複数のモードがあります」で文字列を返す代わりに、参照している実際の整数を返したいですか?

4

3 に答える 3

12

Counter作成し、最も一般的な要素を選択します。

from collections import Counter
from itertools import groupby

l = [1,2,3,3,3,4,4,4,5,5,6,6,6]

# group most_common output by frequency
freqs = groupby(Counter(l).most_common(), lambda x:x[1])
# pick off the first group (highest frequency)
print([val for val,count in next(freqs)[1]])
# prints [3, 4, 6]
于 2013-02-10T01:17:11.217 に答える