2011-02-01 3 views
6
를 제거

가능한 중복 : 나는 목록을 정렬 할 수있는 쉬운 방법을 찾고
In python, how do I take the highest occurrence of something in a list, and sort it that way?종류의 인기로, 목록을 가지고 다음 중복

안녕 모두,

인기에 의해 다음 중복 요소를 제거합니다. 목록 주어진 예를 들어

:

[8, 8, 1, 1, 5, 8, 9] 

나는 다음과 같은 목록으로 끝낼 것 다음

[8, 1, 5, 9] 
+0

당신은 더 좋은 예를 제공해야합니다. 너의 인기 순서는 자릿수의 자연 순서와 같다. 네가 두 개의 아홉 개를 가졌다면'[1,3,9,5]'가 될 것인가? –

+0

예. 혼란을 드려 죄송합니다! –

+0

@kahm : 인기별로 목록을 정렬 할 수 없습니다. 카운트가 포함 된 다른 중간 구조를 만들어야합니다. 다른 구조는 무엇입니까? –

답변

12

@SilentGhost는 Python 2.7 이상을위한 훌륭한 솔루션을 제공합니다. 2.6 세 이상 비교적 간단한 솔루션 :이 솔루션은 그러나,이다

a = [8, 8, 1, 1, 5, 8, 9] 

popularity = sorted(set(a), key=lambda x: -a.count(x)) 

[8, 1, 5, 9] 

(때문에 count의) 비용.

여기에 또 다른 임시 사전에 더 나은 솔루션 :

a = [8, 8, 1, 1, 5, 8, 9] 
d = {} 
for i in a: 
    d[i] = d.get(i, 0) + 1 
popularity = sorted(d, key=d.get, reverse=True) 
+5

큰 목록에는 매우 비쌉니다. – SilentGhost

+0

@SilentGhost - 네 말이 맞아. 나는 더 나은 해결책을 추가했다. – eumiro

+1

나는'key = d.get'로 충분하다고 생각한다. – SilentGhost

13
>>> lst = [1, 1, 3, 3, 5, 1, 9] 
>>> from collections import Counter 
>>> c = Counter(lst) 
>>> [i for i, j in c.most_common()] 
[1, 3, 5, 9] 

레거시에 대한 링크 버전 - 대한 collections.Counter 문서를 참조하십시오 호환 가능한 구현.

+2

'Counter '는 파이썬 2.7+에서만 사용 가능하다고 언급해야합니다. pre 2.7에 대한 구현은 다음과 같습니다. http://code.activestate.com/recipes/576611/ (또는 정상적인 루프와 딕트를 사용할 수 있습니다) –

+0

@Felix : 'Counter'이전에 'defaultdict'가 있습니다. :) –

관련 문제