리스트 안에서 최댓값과 최솟값의 차이가 가장 작은 행(row)을 찾아야 하는 경우, 리스트 컴프리헨션(list comprehension)과 함께 내장 함수인 min(), max() 메서드를 활용하면 간단하게 해결할 수 있습니다.
예제 코드
다음은 극단값의 차이가 가장 작은 행을 구하는 방법을 보여주는 예제입니다.
my_list = [[41, 1, 38], [25, 33, 1], [13, 44, 65], [1, 22]]
print("The list is : ")
print(my_list)
my_min_val = min([max(elem) - min(elem) for elem in my_list])
my_result = [elem for elem in my_list if max(elem) - min(elem) == my_min_val]
print("The result is : ")
print(my_result)실행 결과
The list is : [[41, 1, 38], [25, 33, 1], [13, 44, 65], [1, 22]] The result is : [[1, 22]]
코드 설명
먼저 리스트 안에 여러 개의 리스트(행)로 구성된 중첩 리스트를 정의하고, 콘솔에 출력합니다.
리스트 컴프리헨션을 사용해 각 행을 순회하면서 해당 행의 최댓값과 최솟값의 차이를 계산합니다.
계산된 차이 값들 중 최솟값을 구하여 변수
my_min_val에 할당합니다.다시 리스트 컴프리헨션으로 전체 리스트를 순회하면서, 각 행의 최댓값과 최솟값의 차이가 앞서 구한 최소 차이 값과 일치하는지 확인합니다.
조건을 만족하는 행들만 모아 새로운 리스트로 만들고, 이를 변수
my_result에 저장합니다.최종 결과를 콘솔에 출력합니다.
참고 사항
위 예제에서는 각 행의 요소 개수가 달라도([1, 22]처럼 두 개만 있는 경우) 동일하게 동작합니다. 또한 최소 차이가 같은 행이 여러 개라면, 조건을 만족하는 모든 행이 결과 리스트에 포함됩니다. 만약 첫 번째로 발견된 하나의 행만 필요하다면 next()와 제너레이터 표현식을 활용하는 방법도 있습니다.