튜플들의 목록에서 첫 번째 요소가 서로 같은 인접 튜플들을 하나로 합쳐야 하는 경우가 있습니다. 이럴 때 간단한 for 루프와 if 조건문을 사용하면 손쉽게 처리할 수 있으며, 요소를 하나의 리스트에 누적할 때는 extend 메서드를 활용하면 됩니다.
아래 예제를 통해 실제 구현 방법과 실행 결과를 확인해 보겠습니다.
예제 코드
my_list = [(43, 15), (66, 98), (64, 80), (14, 9), (47, 17)]
print("The list is : ")
print(my_list)
my_result = []
for sub in my_list:
if my_result and my_result[-1][0] == sub[0]:
my_result[-1].extend(sub[1:])
else:
my_result.append([ele for ele in sub])
my_result = list(map(tuple, my_result))
print("The extracted elements are : ")
print(my_result)실행 결과
The list is : [(43, 15), (66, 98), (64, 80), (14, 9), (47, 17)] The extracted elements are : [(43, 15), (66, 98), (64, 80), (14, 9), (47, 17)]
코드 설명
먼저 여러 개의 튜플을 담은 리스트를 정의하고, 콘솔에 출력하여 확인합니다.
결과를 저장할 빈 리스트
my_result를 선언합니다.for루프를 통해 튜플 목록을 순회하면서, 현재 처리 중인 튜플의 첫 번째 요소가 직전에 저장된 튜플의 첫 번째 요소와 일치하는지 검사합니다.두 요소가 일치하면
extend메서드를 사용해 나머지 요소들을 기존 튜플 뒤에 이어 붙여 하나의 그룹으로 만듭니다.일치하지 않는 경우에는 해당 튜플을 리스트 형태로 변환하여 새롭게 저장하고, 마지막에는
map(tuple, ...)을 통해 모든 내부 리스트를 다시 튜플로 변환합니다.이렇게 병합된 최종 결과가 콘솔에 출력됩니다.
마무리
이 예제에서는 입력 데이터에 첫 번째 요소가 중복된 튜플이 존재하지 않으므로, 원본 리스트와 동일한 결과가 출력되었습니다. 하지만 만약 (43, 15)와 (43, 20)처럼 첫 번째 요소가 같은 튜플이 연속으로 등장한다면, 두 튜플이 (43, 15, 20) 형태로 자동 병합됩니다. 이 기법은 로그 데이터 그룹화나 시계열 데이터 전처리 등 다양한 상황에서 유용하게 활용할 수 있습니다.