리스트에 포함된 특정 값 'K'의 등장 빈도를 기준으로 요소들을 정렬해야 할 때, collections 모듈의 Counter 클래스와 리스트 컴프리헨션(list comprehension)을 함께 사용하면 간결하고 효율적으로 처리할 수 있습니다.
예제
다음은 이를 구현한 예제 코드입니다.
from collections import Counter
my_list = [34, 56, 78, 99, 99, 99, 99, 99, 12, 12, 32, 51, 15, 11, 0, 0]
print ("The list is ")
print(my_list)
my_result = [item for items, c in Counter(my_list).most_common() for item in [items] * c]
print("The result is ")
print(my_result)출력 결과
The list is [34, 56, 78, 99, 99, 99, 99, 99, 12, 12, 32, 51, 15, 11, 0, 0] The result is [99, 99, 99, 99, 99, 0, 0, 12, 12, 32, 34, 11, 78, 15, 51, 56]
코드 설명
collections모듈에서Counter클래스를 임포트하여 환경에 불러옵니다.정수로 이루어진 리스트를 정의한 뒤, 콘솔에 출력합니다.
리스트 컴프리헨션을 사용해 각 요소를 순회하며,
most_common()메서드를 호출해 요소별 등장 횟수를 빈도가 높은 순서대로 정렬된 (요소, 개수) 쌍으로 가져옵니다.각 요소를 자신의 빈도(
c)만큼 반복하여 하나의 리스트로 다시 펼칩니다.이렇게 만들어진 정렬된 리스트를 변수
my_result에 할당합니다.최종 결과를 콘솔에 출력합니다.
실행 결과를 보면 가장 많이 등장한 99(5회)가 맨 앞에 위치하고, 그다음으로 두 번씩 등장한 0과 12, 마지막으로 한 번씩만 등장한 나머지 요소들이 뒤따르는 것을 확인할 수 있습니다. 참고로 most_common()은 빈도가 같은 경우 원래 삽입된 순서를 유지하므로, 동일 빈도 요소들의 상대적 순서도 예측 가능합니다.