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

Python – 리스트에서 연속적으로 동일한 요소의 범위 추출하기

리스트 안에 연속적으로 반복되는 동일한 요소들이 있을 때, 각 요소가 어느 인덱스 범위에 걸쳐 있는지 추출해야 하는 경우가 있습니다. 이럴 때는 간단한 while 반복문append 메서드를 활용하면 손쉽게 해결할 수 있습니다.

예제

아래는 실제 구현 예시입니다.

my_list = [12, 23, 23, 23, 48, 48, 36, 17, 17]

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

my_result = []

index = 0
while index < (len(my_list)):
    start_position = index
    val = my_list[index]

    while (index < len(my_list) and my_list[index] == val):
        index += 1
    end_position = index - 1

    my_result.append((val, start_position, end_position))

print("The my_result is :")
print(my_result)

출력 결과

The list is :
[12, 23, 23, 23, 48, 48, 36, 17, 17]
The my_result is :
[(12, 0, 0), (23, 1, 3), (48, 4, 5), (36, 6, 6), (17, 7, 8)]

코드 설명

  • 먼저 정수들이 담긴 리스트를 정의하고 콘솔에 출력합니다.

  • 결과를 저장할 빈 리스트를 하나 생성합니다.

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

  • 바깥쪽 while 반복문을 사용해 리스트 전체를 순회합니다.

  • 안쪽 while 조건문은 현재 인덱스가 리스트 길이보다 작은지, 그리고 해당 인덱스의 값이 앞서 저장한 값과 동일한지 검사합니다.

  • 조건이 참이면 인덱스를 1씩 증가시켜 다음 요소로 넘어갑니다.

  • 조건이 거짓이 되어 내부 반복이 종료되면, 마지막 인덱스에서 1을 뺀 값을 끝 위치(end_position)로 지정합니다.

  • 요소 값, 시작 위치, 끝 위치를 튜플 형태로 묶어 결과 리스트에 추가(append)합니다.

  • 모든 순회가 끝나면 최종 결과가 콘솔에 출력됩니다.

결과 분석

실행 결과를 살펴보면, 값 23은 인덱스 1부터 3까지, 값 48은 인덱스 4부터 5까지, 값 17은 인덱스 7부터 8까지 연속으로 나타납니다. 각 연속 구간이 (값, 시작 인덱스, 끝 인덱스) 형태의 튜플로 깔끔하게 정리되어 출력되는 것을 확인할 수 있습니다. 이 방식은 데이터 정규화나 로그 분석처럼 반복 패턴을 찾아야 하는 상황에서 유용하게 활용할 수 있습니다.