2013-03-07 79 views
1

我写了一个程序来计算最常出现的数字。这很有效,除非你在列表中有2个最常出现的数字,例如7,7,7,9,9,9。对于我写在:Python 3.0+计算模式

if len(modeList) > 1 and modeList[0] != modeList[1]: 
    break 

但后来我遇到像7,9,9,9,9一组数字的其他问题。我该怎么办。下面是我的代码,将计算一个模式。

list1 = [7,7,7,9,9,9,9] 
numList=[] 
modeList=[] 
finalList =[] 
for i in range(len(list1)): 
    for k in range(len(list1)): 
     if list1[i] == list1[k]: 
      numList.append(list1[i]) 
numList.append("EOF") 
w = 0 
for w in range(len(numList)): 
    if numList[w] == numList[w + 1]: 
     modeList.append(numList[w]) 
    if numList[w + 1] == "EOF": 
     break 
w = 0 
lenMode = len(modeList) 
print(lenMode) 
while lenMode > 1: 
    for w in range(lenMode): 
     print(w) 
     if w != lenMode - 1: 
      if modeList[w] == modeList[w + 1]: 
       finalList.append(modeList[w]) 
       print(w) 
    lenFinal = len(finalList) 
    modeList = [] 
    for i in range(lenFinal): 
     modeList.append(finalList[i]) 
    finalList = [] 
    lenMode = len(modeList) 

然后

print(modeList) 

我们还没有学会柜台,但我将开放,如果有人可以解释!

回答

3

我只想用collections.Counter此:

>>> from collections import Counter 
>>> c = Counter([7,9,9,9,9]) 
>>> max(c.items(), key=lambda x:x[1])[0] 
9 

这实在是相当简单。它所做的就是统计每个值出现在列表中的次数,然后选择计数最高的元素。

+0

所以你可以解释集合,计数器键和lambda。我写的清单只是一个例子。我正在将文件中的数字读入列表中。然后找到模式。 – Shaw 2013-03-07 19:14:30

0

我会用这个statistics.mode()。如果有多种模式,则会引发异常。如果你需要处理多种模式(我不清楚这是否是这种情况),你可能想要使用NPE建议的collections.Counter对象。