개요
파이썬에서 중첩 리스트(행) 중 이미 정렬되어 있는 요소만 골라내야 하는 경우가 있습니다. 이럴 때 리스트 컴프리헨션(list comprehension)과 sorted(), list() 메서드를 함께 활용하면 간단하게 해결할 수 있습니다.
아래 예제를 통해 실제 동작 과정을 살펴보겠습니다.
예제 코드
my_list = [[99, 6, 75, 10], [1, 75, 2, 4, 99], [75, 15, 99, 2], [1, 4, 15, 99]]
print("The list is :")
print(my_list)
my_result = [sub for sub in my_list if sub == list(sorted(sub)) or sub == list(sorted(sub, reverse=True))]
print("The resultant list is :")
print(my_result)실행 결과
The list is : [[99, 6, 75, 10], [1, 75, 2, 4, 99], [75, 15, 99, 2], [1, 4, 15, 99]] The resultant list is : [[1, 4, 15, 99]]
코드 설명
여러 개의 리스트(행)로 구성된 중첩 리스트를 정의하고 콘솔에 출력합니다.
리스트 컴프리헨션을 사용해 각 하위 리스트를 순회하면서, 해당 리스트가 오름차순으로 정렬한 결과와 동일하거나 내림차순(reverse=True)으로 정렬한 결과와 동일한지 검사합니다.
조건이 참인 경우, 그 하위 리스트가 결과 변수에 할당됩니다.
최종적으로 필터링된 결과 리스트를 콘솔에 출력합니다.
핵심 포인트
sorted(sub)는 원본 리스트를 변경하지 않고 정렬된 새 리스트를 반환합니다. 따라서 sub == sorted(sub) 비교를 통해 해당 행이 이미 정렬 상태인지 확인할 수 있으며, reverse=True 옵션을 추가하면 내림차순으로 정렬된 경우도 함께 걸러낼 수 있습니다.
위 예제에서는 네 개의 행 중 마지막 행 [1, 4, 15, 99]만 오름차순으로 정렬되어 있으므로, 이 행만 결과 리스트에 포함됩니다.