개요
파이썬에서 정렬된(ordered) 튜플, 즉 요소들이 오름차순으로 배치되어 있는 튜플만 골라내야 하는 경우가 있습니다. 이럴 때는 리스트 컴프리헨션(list comprehension)과 함께 sorted() 함수, tuple() 함수, 그리고 == 비교 연산자를 사용하면 아주 간단하게 해결할 수 있습니다.
핵심 아이디어
어떤 튜플을 정렬했을 때 그 결과가 원본과 완전히 동일하다면, 해당 튜플은 이미 정렬되어 있다는 의미입니다. 이 성질을 이용하면 조건에 맞는 튜플만 손쉽게 필터링할 수 있습니다.
예제 코드
아래는 정렬된 튜플을 추출하는 과정을 보여주는 예제입니다.
my_list = [(15, 74, 36, 22, 54), (13, 24, 56), (59, 60, 34), (42, 65, 56), (99, 91)]
print("원본 리스트 :")
print(my_list)
my_result = [element for element in my_list if tuple(sorted(element)) == element]
print("결과 리스트 :")
print(my_result)실행 결과
원본 리스트 : [(15, 74, 36, 22, 54), (13, 24, 56), (59, 60, 34), (42, 65, 56), (99, 91)] 결과 리스트 : [(13, 24, 56)]
코드 설명
정수로 구성된 여러 개의 튜플을 담은 리스트를 정의하고, 콘솔에 출력합니다.
리스트 컴프리헨션을 사용해 리스트를 순회하면서, 각 요소를
sorted()로 정렬한 뒤tuple()로 다시 튜플 형태로 변환하고, 원래 요소와 비교합니다.두 값이 같다면(
==) 해당 튜플은 이미 오름차순으로 정렬되어 있는 것이므로, 결과 리스트에 포함됩니다.조건을 만족하는 튜플들만 모아 최종 결과를 변수에 저장하고 콘솔에 출력합니다.
추가 팁
위 예제에서는 첫 번째 튜플인 (13, 24, 56)만 오름차순으로 정렬되어 있기 때문에 결과로 반환됩니다. 내림차순 기준으로 확인하고 싶다면 비교 조건을 tuple(sorted(element, reverse=True)) == element처럼 변경하면 됩니다. 또한 데이터 양이 매우 큰 경우에는 제너레이터 표현식을 활용하면 메모리를 절약할 수 있습니다.