리스트 안에 연속적으로 반복되는 동일한 요소들이 있을 때, 각 요소가 어느 인덱스 범위에 걸쳐 있는지 추출해야 하는 경우가 있습니다. 이럴 때는 간단한 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까지 연속으로 나타납니다. 각 연속 구간이 (값, 시작 인덱스, 끝 인덱스) 형태의 튜플로 깔끔하게 정리되어 출력되는 것을 확인할 수 있습니다. 이 방식은 데이터 정규화나 로그 분석처럼 반복 패턴을 찾아야 하는 상황에서 유용하게 활용할 수 있습니다.