리스트 내 요소들의 최댓값과 최솟값(극단값)의 차이가 특정 값 K보다 큰 경우에 해당하는 리스트만 추출해야 할 때가 있습니다. 이러한 작업은 리스트 컴프리헨션(list comprehension)과 파이썬의 내장 함수인 min(), max()를 함께 사용하면 간단하게 해결할 수 있습니다.
아래에서 실제 동작 예시를 살펴보겠습니다.
예제 코드
my_list = [[13, 52, 11], [94, 12, 21], [23, 45, 23], [11, 16, 21]]
print("The list is :")
print(my_list)
key = 40
my_result = [element for element in my_list if max(element) - min(element) > key]
print("The result is :")
print(my_result)실행 결과
The list is : [[13, 52, 11], [94, 12, 21], [23, 45, 23], [11, 16, 21]] The result is : [[13, 52, 11], [94, 12, 21]]
코드 설명
먼저 중첩 리스트(리스트 안에 여러 개의 리스트가 포함된 구조)를 정의하고 콘솔에 출력합니다.
기준이 되는 임계값 K(
key)를 정의합니다. 이 예제에서는 40으로 설정했습니다.리스트 컴프리헨션을 사용하여 원본 리스트의 각 하위 리스트를 순회하면서, 각 요소에 대해
max(element) - min(element)로 최댓값과 최솟값의 차이를 계산하고 이 값이key보다 큰지 비교합니다.조건을 만족하는 요소들만 모아 새로운 리스트로 만든 뒤, 그 결과를 변수
my_result에 할당합니다.마지막으로 필터링된 결과를 콘솔에 출력합니다.
결과 분석
실행 결과를 보면 [13, 52, 11]은 최댓값 52와 최솟값 11의 차이가 41로 40보다 크고, [94, 12, 21]은 94 − 12 = 82로 조건을 만족하므로 결과에 포함됩니다. 반면 [23, 45, 23]은 차이가 22, [11, 16, 21]은 차이가 10으로 조건에 맞지 않아 제외되었습니다.
이 방식은 코드가 한 줄로 간결하며 가독성이 뛰어나, 데이터 필터링 작업에서 널리 활용됩니다. 만약 데이터 양이 매우 크다면 제너레이터 표현식을 사용하여 메모리 사용량을 줄일 수도 있습니다.