유사한 튜플의 발생 횟수를 기록해야 하는 경우 'map' 메서드, 'Counter' 메서드, 그리고 'sorted' 메서드를 함께 활용하면 손쉽게 해결할 수 있습니다.
먼저 관련 개념을 간단히 살펴보겠습니다.
핵심 개념 정리
리스트와 튜플 리스트
리스트는 정수, 실수, 문자열 등 서로 다른 자료형의 값을 하나의 변수에 저장할 수 있는 자료구조입니다. 튜플 리스트란 이름 그대로 리스트 안에 여러 개의 튜플이 담긴 형태를 의미합니다.
map 함수
map 함수는 주어진 함수나 연산을 반복 가능한 객체(리스트, 튜플 등)의 모든 요소에 하나씩 적용한 뒤, 그 결과를 반환합니다.
sorted 메서드
'sorted' 메서드는 리스트의 요소들을 오름차순으로 정렬할 때 사용됩니다.
Counter 클래스
'Counter'는 collections 모듈에 포함된 하위 클래스로, 해시 가능한(hashable) 객체의 개수를 세는 데 특화되어 있습니다. 호출되는 순간 리스트나 튜플 같은 반복 가능한 객체로부터 내부적으로 해시 테이블을 생성하며, 카운트가 0이 아닌 모든 요소에 대한 결과를 반환합니다.
아래 예제를 통해 실제 동작 방식을 확인해 보겠습니다.
예제 코드
from collections import Counter
my_list_1 = [(11, 14), (0, 78), (33, 67), (89, 0)]
print("The list of tuple is : ")
print(my_list_1)
my_result = dict(Counter(tuple(elem) for elem in map(sorted, my_list_1)))
print("The frequency of like tuples is : ")
print(my_result)
실행 결과
The list of tuple is :
[(11, 14), (0, 78), (33, 67), (89, 0)]
The frequency of like tuples is :
{(11, 14): 1, (0, 78): 1, (33, 67): 1, (0, 89): 1}
코드 설명
위 코드의 실행 흐름은 다음과 같습니다.
- collections 모듈에서 Counter를 임포트합니다.
- 튜플 리스트를 정의한 뒤 콘솔에 출력합니다.
- 'map' 메서드를 통해 'sorted'를 각 튜플에 적용하여 요소들을 정렬합니다. 이 과정에서 (89, 0)은 (0, 89)로 재정렬됩니다.
- 정렬된 튜플들을 다시 튜플로 변환한 후 'Counter'에 전달하여 각 튜플의 빈도를 계산합니다.
- 결과를 dict()로 감싸 딕셔너리 형태로 변환한 뒤 변수에 저장합니다.
- 최종 결과를 콘솔에 출력합니다.
이처럼 map, sorted, Counter 세 가지를 조합하면 복잡한 반복문 없이도 한 줄의 코드로 유사한 튜플의 발생 빈도를 깔끔하게 집계할 수 있습니다.