파이썬은 다양한 라이브러리와 내장 함수를 폭넓게 지원하기 때문에 데이터 분석 분야에서 가장 널리 사용되는 언어 중 하나입니다. 실무에서는 여러 개의 튜플(tuple)로 구성된 자료에서 특정 열(column)에 해당하는 값들을 모두 더해야 하는 경우가 종종 발생합니다. 이 글에서는 일련의 튜플에서 같은 위치, 즉 동일한 열에 있는 값들을 합산하는 방법을 예제와 함께 살펴보겠습니다.
튜플의 열 합계는 크게 두 가지 방식으로 구현할 수 있습니다.
1. for 루프와 zip() 함수 활용
for 루프로 각 항목을 순회하면서 zip() 함수를 적용하면 서로 다른 튜플에 흩어져 있던 같은 열의 값들이 한데 모입니다. 이후 sum() 함수로 각 열의 합계를 구하고, 최종 결과를 새로운 튜플 형태로 얻습니다.
여기서 핵심은 zip(*data)처럼 애스터리스크(*)로 언패킹하는 부분입니다. 이렇게 하면 중첩된 리스트가 전치되어, 원래 서로 다른 튜플에 있던 같은 위치의 요소들이 하나의 그룹으로 묶입니다.
예제 코드
data = [[(3, 92), (21, 4), (15, 6)],[(25, 62), (12, 7), (15, 7)]]
print("The list of tuples: " + str(data))
# 리스트 컴프리헨션 + zip() 사용
result = [tuple(sum(m) for m in zip(*n))
for n in zip(*data)]
print(" Column summation of tuples: " + str(result))
실행 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
The list of tuples: [[(3, 92), (21, 4), (15, 6)], [(25, 62), (12, 7), (15, 7)]]
Column summation of tuples: [(28, 154), (33, 11), (30, 13)]
결과를 해석해 보면, 첫 번째 출력 튜플 (28, 154)은 두 리스트의 첫 번째 튜플인 (3, 92)와 (25, 62)에서 같은 자리의 값끼리 더한 3+25=28, 92+62=154에 해당합니다.
2. map()과 zip() 함수 활용
for 루프를 직접 작성하지 않고 map() 함수를 사용하면 동일한 결과를 더 간결한 코드로 얻을 수 있습니다. map()은 각 열의 값 그룹에 sum 함수를 일괄 적용해 주므로 반복 로직이 드러나지 않아 코드가 깔끔해집니다.
예제 코드
data = [[(3, 92), (21, 4), (15, 6)],[(25, 62), (12, 7), (15, 7)]]
print("The list of tuple values: " + str(data))
# zip() + map() 사용
result = [tuple(map(sum, zip(*n)))
for n in zip(*data)]
print(" Column summation of tuples: " + str(result))
실행 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
The list of tuple values: [[(3, 92), (21, 4), (15, 6)], [(25, 62), (12, 7), (15, 7)]]
Column summation of tuples: [(28, 154), (33, 11), (30, 13)]
마무리
지금까지 파이썬에서 튜플의 열 합계를 구하는 두 가지 방법을 살펴보았습니다. zip()으로 같은 열의 값을 묶고 sum() 또는 map()으로 합산하는 패턴은 행렬 형태의 데이터를 다룰 때 매우 유용하게 활용됩니다. 가독성을 중시한다면 for 루프 방식을, 간결함을 원한다면 map() 방식을 선택하시면 됩니다.