중앙값 개념
중앙값(영어: median)는 주어진 값들을 크기의 순서대로 정렬했을 때 가장 중앙에 위치하는 값을 의미한다. 예를 들어 1, 2, 100의 세 값이 있을 때, 2가 가장 중앙에 있기 때문에 2가 중앙값이다.
값이 짝수개일 때에는 중앙값이 유일하지 않고 두 개가 될 수도 있다. 이 경우 그 두 값의 평균을 취한다. 예를 들어 1, 10, 90, 200 네 수의 중앙값은 10과 90의 평균인 50이 된다. – 출처: 위키백과(https://ko.wikipedia.org/wiki/%EC%A4%91%EC%95%99%EA%B0%92)
알고리즘
- 데이터 오름차순으로 정렬(sort함수)
- 짝수, 홀수 구분
- 홀수일 경우, [center-index] 구해서 Return
- 짝수일 경우, [center-index] + [center-index – 1] / 2해서 Return
Code
def get_median(a):
a.sort()
centerIndex = len(a) // 2
if len(a)% 2 == 1:
return a[centerIndex ]
return ((a[centerIndex - 1] + a[centerIndex ]) / 2)
효율적인 코드
-index를 이용해서 if문 없이 파이썬스타일로 바꿔보기
def get_median_v2(data):
data = sorted(data)
centerIndex = len(data)//2
return (data[centerIndex ] + data[-centerIndex - 1])/2
설명
- sorted()함수를 이용해 오름차순 정렬한다 *sorted는 반환받을 변수가 필요
- centerIndex를 구한다
- -index를 이용해 한 줄로 return한다.
- 홀수일 경우, -index가 index와 한 위치 어긋난다.
- 따라서 -(index-1)을 하면 같은 위치의 요소를 지목하게 된다.
- 두 수를 더하면 *2가 되므로 /2를 해도 같은 요소를 반환하게 된다.
- 짝수일 경우, -index가 index의 위치가 일치한다.
- 따라서 -(index-1)을 하면 index보다 한 위치 앞서가는 요소를 지목하게 된다.
- 두 수를 더하고 /2를 하면 두 수의 평균을 반환하게 된다.