2013-03-07 57 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對象。