개요
리스트에서 피크(peak, 봉우리) 또는 밸리(valley, 골짜기)의 개수를 구해야 할 때는 간단한 반복문과 조건식만으로 손쉽게 해결할 수 있습니다.
여기서 피크란 자신의 양옆 요소보다 큰 값을 의미하고, 밸리는 양옆 요소보다 작은 값을 의미합니다. 아래 예제를 통해 직접 확인해 보겠습니다.
예제 코드
my_list = [11, 12, 24, 12, 36, 17, 28, 63]
print("The list is :")
print(my_list)
my_result = 0
for index in range(1, len(my_list) - 1):
if my_list[index + 1] > my_list[index] < my_list[index - 1] or my_list[index + 1] < my_list[index] > my_list[index - 1]:
my_result += 1
print("The result is :")
print(my_result)
실행 결과
The list is : [11, 12, 24, 12, 36, 17, 28, 63] The result is : 4
코드 설명
먼저 리스트를 정의하고 콘솔에 출력합니다.
결과를 저장할 정수 변수를 0으로 초기화합니다.
리스트의 첫 번째와 마지막 요소를 제외한 나머지 요소들을 순회하며, 현재 요소가 이전 요소와 다음 요소보다 모두 큰지(피크), 또는 모두 작은지(밸리)를 검사합니다.
조건을 만족하면 카운트 변수를 1씩 증가시킵니다.
모든 순회가 끝나면 최종 결과를 콘솔에 출력합니다.
결과 분석
위 예제에서 피크와 밸리로 판별된 값은 다음과 같습니다.
24 → 양옆(12, 12)보다 큰 피크
12 → 양옆(24, 36)보다 작은 밸리
36 → 양옆(12, 17)보다 큰 피크
17 → 양옆(36, 28)보다 작은 밸리
따라서 총 4개의 피크와 밸리가 카운트되어 결과값 4가 출력됩니다. 참고로 파이썬의 연쇄 비교(chained comparison) 문법 덕분에 a > b < c처럼 간결하게 조건을 표현할 수 있다는 점도 눈여겨볼 만합니다.