2013-02-10 17 views
0

基本上我只需要弄清楚如何從Python的列表中產生模式(最常出現的數字),無論該列表是否具有多種模式?如何在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 

但不是在返回字符串「所有值只出現一次,」或「列表中有多種模式,」我希望它返回它的引用實際整數?

+0

你想入手這款:http://stackoverflow.com/a/5829377/16363 – Mark 2013-02-10 01:09:24

+0

啊,不,我已經看到了。我需要一些能夠產生模式和只有模式的東西,而不是其他的整數和它們出現的頻率? – hayleyelisa 2013-02-10 01:11:21

+0

所以你只是想返回列表中的元素的頻率 – Harpal 2013-02-10 01:13:08

回答

4

做一個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 freqs.next()[1]] 
# prints [3, 4, 6] 
+0

是的!這正是我需要的!非常感謝!! – hayleyelisa 2013-02-10 01:20:51

+0

我收到此錯誤: 'itertools.groupby'對象沒有屬性'next' – 2016-10-18 06:17:45