2016-11-21 3 views
0
listg = [1,2,3,4,4,5,2] 


modeval = [0] 
modetimes = [0] 

for i in range(len(listg)): 
    count = listg.count(listg(i)) 
    if count > modetimes[0]: 
     modeval = [listg(i)] 
     count = [modeval] 

    elif count == modetimes[0]: 
     if listg in modeval: 
      modeval.remove[listg(i)] 
    modeval.append[listg(i)] 

mode = modeval 

print (mode) 

호출하지 않습니다 나는파이썬 3.5 형식 오류는 '리스트'개체 내가 람다 또는 모드 기능을 사용하지 않고 목록의 모드를 찾기 위해 노력하고 있지만있어

count = listg.count(listg(i)) 
에 둥근 괄호를 사용할 때마다

modeval = [list(i)] 

가 나는 형식 오류를 얻을 : '목록'객체가 호출되지 않습니다. 나는 둥근 것들로 대괄호를 돌리려고했지만 인쇄 할 때 번호가 목록의 마지막입니다.

+0

방금 ​​내 대답을 게시 한 후 질문을 다시 읽었습니다. 이전에 대괄호를 사용하여 시도한 것처럼 보이지만 작동하지 않았습니다. 당신의 예제에서'listg.count (listg (i))'가 루프를 통해 처음으로 리턴되기를 기대하고 있습니까? – elethan

답변

2

대괄호로 색인을 생성해야합니다. listg(i)listg[i]으로 변경하십시오. 괄호는 traceback이 제안한 함수/메소드 호출을위한 것입니다.

또한 약간 혼란 스럽지만, 일반적으로이 경우에는 for i in range(len(listg)):을 사용하는 파이썬 방지 패턴으로 간주됩니다. 대신 인덱스를 사용하여, 당신은 직접 목록에서 값을 통해 반복에 의해 "beautiful, idiomatic Python"을 만들 수 있습니다

다음
for i in listg: 
    count = listg.count(i) 
    if count > modetimes[0]: 
     modeval = [i] 
     count = [modeval] 

... 

i 대신 요소를 검색하는 데 사용되는 인덱스의, listg에서 실제 요소가 될 것입니다.

대괄호로 묶인 단일 객체에 할당하면 (예 : modeval = [0]) 한 항목으로 표시됩니다. 그것이 당신이 원하는 것을 잘하면,하지만 그것이 당신의 의도가 아니라면, 혼란스러운 결과로 이어질 수 있습니다.