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

Python에서 첫 번째 요소가 같은 튜플을 하나로 합치는 방법

튜플들의 목록에서 첫 번째 요소가 서로 같은 인접 튜플들을 하나로 합쳐야 하는 경우가 있습니다. 이럴 때 간단한 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) 형태로 자동 병합됩니다. 이 기법은 로그 데이터 그룹화나 시계열 데이터 전처리 등 다양한 상황에서 유용하게 활용할 수 있습니다.