이 튜토리얼에서는 n번째 인덱스 값을 기준으로 튜플 리스트를 오름차순으로 정렬하는 방법을 알아보겠습니다. 예를 들어, [(2, 2), (1, 2), (3, 1)]이라는 튜플 리스트가 있고, 이를 0번째 인덱스 요소를 기준으로 정렬해야 한다면 결과는 [(1, 2), (2, 2), (3, 1)]이 됩니다.
이 작업은 파이썬 내장 함수인 sorted()를 사용하면 간단하게 처리할 수 있습니다. 핵심은 key 키워드 인자에 정렬 기준이 되는 인덱스를 반환하는 함수를 전달하는 것입니다.
sorted() 함수의 동작 원리
sorted()는 리스트를 받아 오름차순으로 정렬된 새로운 리스트를 반환합니다. 만약 내림차순으로 정렬하고 싶다면 reverse=True 키워드 인자를 함께 전달하면 됩니다.
sorted(tuples, key=k_th_index) # 오름차순 정렬 sorted(tuples, key=k_th_index, reverse=True) # 내림차순 정렬
문제 해결 절차
- 튜플 리스트와 정렬 기준이 될 인덱스(key)를 초기화합니다.
- 튜플에서 해당 인덱스의 값을 반환하는 함수를 정의합니다.
- sorted() 함수에 튜플 리스트를 첫 번째 인자로, 앞서 정의한 함수를 key 키워드 인자로 전달합니다. 정렬 과정에서 각 튜플이 함수에 하나씩 전달되며, 함수는 비교 기준이 될 인덱스의 값을 반환합니다.
- 결과를 출력합니다.
예제 코드
## 튜플 리스트
tuples = [(2, 2), (1, 2), (3, 1)]
## 정렬 기준이 될 인덱스
key = 0
## 튜플에서 key번째 인덱스의 값을 반환하는 함수
def k_th_index(one_tuple):
return one_tuple[key]
## sorted 함수 호출
## 첫 번째 인자로 튜플 리스트를 전달하고,
## key 키워드 인자에 기준 함수를 전달합니다.
sorted(tuples, key=k_th_index)실행 결과
위 프로그램을 실행하면 다음과 같은 결과를 얻을 수 있습니다.
[(1, 2), (2, 2), (3, 1)]
주의: 잘못된 인덱스 사용 시 발생하는 오류
만약 key를 len(tuple) - 1보다 큰 값으로 설정하면 어떻게 될까요? 인덱스 범위를 벗어나기 때문에 IndexError가 발생합니다. 직접 확인해 보겠습니다.
오류 발생 예제
## 튜플 리스트
tuples = [(2, 2), (1, 2), (3, 1)]
## len(tuple) - 1보다 큰 인덱스로 key 초기화
key = 2
## 튜플에서 key번째 인덱스의 값을 반환하는 함수
def k_th_index(one_tuple):
return one_tuple[key]
## sorted 함수 호출
sorted(tuples, key=k_th_index)실행 결과
IndexError Traceback (most recent call last)
<ipython-input-13-4c3fa14880dd> in <module>
15 sorted(tuples, key = k_th_index)
<ipython-input-13-4c3fa14880dd> in k_th_index(one_tuple)
10 return one_tuple[key]
IndexError: tuple index out of range이처럼 존재하지 않는 인덱스에 접근하려 하면 tuple index out of range 오류가 발생합니다. 따라서 정렬 기준으로 사용하는 인덱스는 반드시 각 튜플의 길이 범위 안에 있어야 합니다.
정리
이 프로그램은 튜플의 개수나 크기에 상관없이 동작하며, 단 한 가지 조건만 지키면 됩니다. 바로 정렬 기준 인덱스가 len(tuple) - 1을 초과하지 않아야 한다는 것입니다. sorted()와 key 인자만 활용하면 복잡한 정렬 로직 없이도 원하는 기준으로 데이터를 손쉽게 정렬할 수 있습니다.
이 튜토리얼이 도움이 되었기를 바랍니다. 궁금한 점이 있다면 댓글로 남겨주세요!