파이썬에서 리스트의 연속된 요소들을 재정렬해야 하는 경우, collections 모듈의 Counter 클래스와 빈 리스트, 그리고 간단한 반복문을 활용하면 손쉽게 해결할 수 있습니다.
Counter는 리스트 내 각 요소의 등장 횟수(빈도)를 딕셔너리 형태로 계산해 주는 도구로, 이를 이용하면 중복된 요소들이 서로 인접하도록 리스트를 재배치할 수 있습니다.
예제 코드
아래는 위 방식을 구현한 예제입니다.
from collections import Counter
my_list = [21, 83, 44, 52, 61, 72, 81, 96, 18, 44]
print("The list is :")
print(my_list)
my_frequencys = Counter(my_list)
my_result = []
for value, count in my_frequencys.items():
my_result.extend([value]*count)
print("The resultant list is :")
print(my_result)실행 결과
The list is : [21, 83, 44, 52, 61, 72, 81, 96, 18, 44] The resultant list is : [21, 83, 44, 44, 52, 61, 72, 81, 96, 18]
코드 설명
collections모듈에서Counter를 임포트하여 환경에 준비합니다.재정렬할 리스트를 정의한 뒤 콘솔에 출력합니다.
리스트에 대해
Counter객체를 생성하고 변수에 할당합니다. 이 객체에는 각 요소별 등장 횟수가 저장됩니다.결과를 담을 빈 리스트를 하나 생성합니다.
Counter의 각 (값, 개수) 쌍에 접근하여, 해당 값을 개수만큼 반복한 리스트를 만들고extend()로 결과 리스트에 추가합니다. 이 과정에서 동일한 값들은 서로 붙어 있게 됩니다.최종적으로 재정렬된 리스트가 콘솔에 출력됩니다.
핵심 포인트
이 기법은 정렬(sorting)과 달리 요소들의 상대적 순서를 유지하면서 중복 값을 인접하게 배치한다는 점이 특징입니다. 예제에서 볼 수 있듯이 원래 떨어져 있던 두 개의 44가 실행 후 서로 나란히 위치하게 됩니다. 데이터 전처리나 중복 그룹화 작업에서 유용하게 활용할 수 있습니다.