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

파이썬으로 리스트에서 K 차이 미만의 인접 요소 제거하기

리스트에서 서로의 차이가 K보다 작은 인접 요소들을 제거해야 하는 경우, 간단한 반복문과 if 조건문을 활용하면 손쉽게 해결할 수 있습니다.

핵심 아이디어는 먼저 리스트를 오름차순으로 정렬한 뒤, 인접한 두 요소의 차이를 순차적으로 검사하는 것입니다. 차이가 K 미만이라면 해당 요소를 삭제하고, 그렇지 않다면 다음 요소로 인덱스를 이동합니다.

예제 코드

아래는 전체 구현 예시입니다.

my_list = [13, 29, 24, 18, 40, 15]

print("The list is :")
print(my_list)

K = 3

my_list = sorted(my_list)

index = 0

while index < len(my_list) - 1:
    if my_list[index] + K > my_list[index + 1]:
        del my_list[index + 1]
    else:
        index += 1

print("The result is :")
print(my_list)

실행 결과

The list is :
[13, 29, 24, 18, 40, 15]
The result is :
[13, 18, 24, 29, 40]

코드 설명

  • 정수 요소들로 구성된 리스트를 정의하고 콘솔에 출력합니다.

  • 기준이 되는 임계값 K를 3으로 설정합니다.

  • 인덱스 역할을 할 변수를 0으로 초기화합니다.

  • sorted 함수를 사용해 리스트를 오름차순으로 정렬합니다. 정렬은 인접 요소 간 비교를 가능하게 만드는 필수 전처리 단계입니다.

  • while 반복문으로 리스트를 순회하며, 현재 요소와 다음 요소의 차이가 K보다 작으면 다음 요소를 del로 삭제합니다.

  • 두 요소의 차이가 K 이상이면 인덱스를 1 증가시켜 다음 비교 대상으로 넘어갑니다.

  • 모든 순회가 끝나면 최종 결과 리스트를 콘솔에 출력합니다.

동작 원리

위 예제에서 정렬된 리스트는 [13, 15, 18, 24, 29, 40]입니다. 여기서 13과 15의 차이는 2로 K(=3)보다 작으므로 15가 제거됩니다. 이후 13과 18의 차이는 5로 K 이상이므로 유지되고, 같은 방식으로 18과 24, 24와 29도 모두 차이가 4 이상이므로 그대로 남습니다. 최종 결과는 [13, 18, 24, 29, 40]이 됩니다.

이 알고리즘은 정렬에 O(n log n)의 시간 복잡도를 가지며, 순회 및 삭제 과정은 O(n) 내에서 처리되므로 전체적으로 효율적인 편입니다.