Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python으로 배열을 주어진 범위 기준으로 3방향 분할하는 방법

배열과 그 배열의 범위 [startval, endval]이 주어졌을 때, 이 알고리즘은 배열을 세 부분으로 나눕니다.

  • 첫 번째 부분: startval보다 작은 모든 요소가 앞쪽에 위치합니다.
  • 두 번째 부분: startval 이상 endval 이하 범위에 속하는 모든 요소가 그다음에 위치합니다.
  • 세 번째 부분: endval보다 큰 모든 요소가 마지막에 위치합니다.

이 방식은 데이터를 특정 구간을 기준으로 분류해야 할 때 유용하며, 리스트 컴프리헨션(list comprehension)을 활용하면 간결하게 구현할 수 있습니다.

예시

입력: A = [1, 14, 51, 12, 4, 2, 54, 20, 87, 98, 3, 1, 32]
startval = 14, endval = 54
출력: A = [1, 12, 4, 2, 3, 1, 14, 51, 20, 32, 54, 87, 98]

알고리즘

Step 1: 리스트를 세 부분으로 나눕니다.
        - 첫 번째 부분: startval보다 작은 요소들
        - 두 번째 부분: startval 이상 endval 이하인 요소들
        - 세 번째 부분: endval보다 큰 요소들
Step 2: 세 부분을 순서대로 하나로 연결(concatenate)합니다.

예제 코드

def partition_array(input, lowVal, highVal):
   # 입력 리스트를 세 부분으로 분리
   my_first = [num for num in input if num < lowVal]
   my_second = [num for num in input if (num >= lowVal and num <= highVal)]
   my_third = [num for num in input if num > highVal]

# 세 부분을 모두 연결
print(my_first + my_second + my_third)

# 드라이버 프로그램
if __name__ == "__main__":
   my_input = [10, 140, 50, 200, 40, 20, 540, 200, 870, 980, 30, 10, 320]
   my_lowVal = 140
   my_highVal = 200
   partition_array(my_input, my_lowVal, my_highVal)

실행 결과

[10, 50, 40, 20, 30, 10, 140, 200, 200, 540, 870, 980, 320]

실행 결과를 보면 140 미만의 값들이 앞부분에, 140 이상 200 이하의 값들이 중간에, 200 초과의 값들이 뒷부분에 배치된 것을 확인할 수 있습니다. 참고로 각 부분 내부에서는 원래 배열의 순서가 유지되므로, 정렬이 필요하다면 추가적으로 sorted() 함수를 적용하면 됩니다.