2013-03-07 3 views
1

가장 자주 발생하는 숫자를 계산하는 프로그램을 작성했습니다. 이것은 7,7,7,9,9,9와 같은 목록에서 가장 많이 발생하는 숫자가 2 개있는 경우에만 효과적입니다. 그 때문에 나는 다음과 같이 썼다 :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

그래서 컬렉션, 카운터 키 및 람다에 대해 설명 할 수 있습니까? 내가 작성한 목록은 단지 예일뿐입니다. 파일에서 숫자를 목록으로 읽는 중입니다. 그런 다음 모드를 찾습니다. – Shaw

0

이 경우 statistics.mode()을 사용합니다. 둘 이상의 모드가있는 경우 예외가 발생합니다. 여러 모드를 처리해야하는 경우 (NPE가 아닌지 확실하지 않음) NPE에서 제안한대로 collections.Counter 개체를 사용하고 싶을 것입니다.