각 행의 중앙값(median)을 기준으로 행렬(리스트의 리스트)을 정렬해야 하는 경우가 있습니다. Python에서는 statistics 모듈이 제공하는 median() 메서드를 활용해 정렬 기준 함수를 정의한 뒤, sort() 메서드의 key 인자로 지정하면 간단하게 해결할 수 있습니다.
아래는 그 구현 예시입니다.
예제 코드
from statistics import median
def median_row(row):
return median(row)
my_list = [[43, 14, 27], [13, 27, 24], [32, 56, 18], [34, 62, 55]]
print("원본 리스트 :")
print(my_list)
my_list.sort(key=median_row)
print("정렬 결과 :")
print(my_list)실행 결과
원본 리스트 : [[43, 14, 27], [13, 27, 24], [32, 56, 18], [34, 62, 55]] 정렬 결과 : [[13, 27, 24], [43, 14, 27], [32, 56, 18], [34, 62, 55]]
코드 설명
statistics모듈에서median함수를 임포트하여 환경에 불러옵니다.median_row라는 이름의 함수를 정의합니다. 이 함수는 하나의 행(row)을 매개변수로 받아,median()메서드를 사용해 해당 행의 중앙값을 반환합니다.리스트 안에 리스트가 포함된 형태(행렬)의 데이터를 정의하고 콘솔에 출력합니다.
sort()메서드를 호출할 때key인자로 앞서 정의한median_row함수를 지정합니다. 이렇게 하면 각 행의 중앙값을 기준으로 오름차순 정렬이 수행됩니다.정렬된 최종 결과가 콘솔에 출력됩니다.
참고 사항
중앙값은 데이터를 크기 순으로 나열했을 때 가운데 위치하는 값입니다. 요소 개수가 짝수인 경우에는 가운데 두 값의 평균이 반환됩니다.
내림차순으로 정렬하고 싶다면
my_list.sort(key=median_row, reverse=True)처럼reverse=True옵션을 추가하면 됩니다.원본 리스트를 변경하지 않고 새로운 정렬 리스트를 얻고 싶다면
sorted(my_list, key=median_row)를 사용할 수도 있습니다.