Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python – 정렬된 행만 골라내는 필터링 방법

개요

파이썬에서 중첩 리스트(행) 중 이미 정렬되어 있는 요소만 골라내야 하는 경우가 있습니다. 이럴 때 리스트 컴프리헨션(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]만 오름차순으로 정렬되어 있으므로, 이 행만 결과 리스트에 포함됩니다.