튜플 리스트에서 각 튜플의 마지막 요소를 기준으로 오름차순 정렬해야 하는 경우가 종종 있습니다. 이럴 때는 별도의 함수를 정의하고, 리스트를 반복하면서 간단한 스왑(swap) 연산을 수행하는 방식으로 정렬을 구현할 수 있습니다.
아래 예제를 통해 자세히 살펴보겠습니다.
예제 코드
def sort_tuple(my_tup):
my_len = len(my_tup)
for i in range(0, my_len):
for j in range(0, my_len-i-1):
if (my_tup[j][-1] > my_tup[j + 1][-1]):
temp = my_tup[j]
my_tup[j] = my_tup[j + 1]
my_tup[j + 1] = temp
return my_tup
my_tuple = [(1, 92), (34, 25), (67, 89)]
print("The tuple is :")
print(my_tuple)
print("The sorted list of tuples are : ")
print(sort_tuple(my_tuple))
실행 결과
The tuple is :
[(1, 92), (34, 25), (67, 89)]
The sorted list of tuples are :
[(34, 25), (67, 89), (1, 92)]
코드 설명
'sort_tuple'이라는 이름의 함수를 정의하고, 매개변수로 튜플 리스트를 전달받습니다.
중첩 반복문을 사용해 리스트를 순회하며, 현재 튜플의 마지막 요소(
my_tup[j][-1])가 바로 뒤 튜플의 마지막 요소보다 큰지 비교합니다.조건이 참이면 임시 변수
temp를 이용한 스왑 연산으로 두 튜플의 위치를 교환합니다.모든 비교가 끝나면 정렬된 튜플 리스트를 반환합니다.
함수 외부에서는 튜플 리스트를 정의한 뒤 콘솔에 출력하고, 이 리스트를 인자로 넘겨 함수를 호출합니다.
정렬된 최종 결과가 콘솔에 출력됩니다.
위 코드는 버블 정렬(bubble sort) 알고리즘을 응용한 것으로, 시간 복잡도는 O(n²)입니다.
더 간결한 방법: sorted()와 key 활용하기
실무에서는 내장 함수 sorted()와 key 인자를 사용하면 한 줄로 동일한 작업을 수행할 수 있으며, 성능 면에서도 더 유리합니다.
my_tuple = [(1, 92), (34, 25), (67, 89)]
sorted_tuple = sorted(my_tuple, key=lambda x: x[-1])
print(sorted_tuple)
[(34, 25), (67, 89), (1, 92)]
key=lambda x: x[-1]는 각 튜플의 마지막 요소를 정렬 기준으로 삼겠다는 의미입니다. 직접 정렬 로직을 구현하는 학습 목적이 아니라면, 이처럼 파이썬 내장 기능을 활용하는 것이 가독성과 효율성 모두에서 좋은 선택입니다.