Python에서 두 개의 튜플을 요소별로 곱해야 할 때는 'zip' 메서드와 제너레이터 표현식을 활용하면 간단하게 처리할 수 있습니다.
zip 메서드는 여러 이터러블(iterable)을 인자로 받아, 각 이터러블에서 같은 위치에 있는 요소들을 하나의 튜플로 묶어주는 역할을 합니다.
제너레이터(generator)는 이터레이터를 손쉽게 만들 수 있는 방법입니다. 제너레이터는 내부적으로 '__iter__()'와 '__next__()' 메서드가 구현된 클래스를 자동으로 생성하고, 내부 상태를 추적합니다. 또한 더 이상 반환할 값이 없을 때 'StopIteration' 예외를 발생시켜 순회가 끝났음을 알립니다.
예제
my_tuple_1 = (23, 45, 12, 56, 78)
my_tuple_2 = (89, 41, 76, 0, 11)
print("The first tuple is : ")
print(my_tuple_1)
print("The second tuple is : ")
print(my_tuple_2)
my_result = tuple(elem_1 * elem_2 for elem_1, elem_2 in zip(my_tuple_1, my_tuple_2))
print("The multiplied tuple is : ")
print(my_result)출력 결과
The first tuple is : (23, 45, 12, 56, 78) The second tuple is : (89, 41, 76, 0, 11) The multiplied tuple is : (2047, 1845, 912, 0, 858)
코드 설명
- 두 개의 튜플을 정의한 뒤 콘솔에 출력합니다.
- zip() 함수를 사용해 두 튜플을 묶고, 제너레이터 표현식으로 각 요소 쌍을 순회합니다.
- 첫 번째 튜플의 각 요소와 두 번째 튜플의 대응되는 요소를 서로 곱합니다.
- 곱셈 결과를 tuple() 함수로 튜플 형태로 변환합니다.
- 최종 연산 결과를 변수 my_result에 할당합니다.
- 결과값을 콘솔에 출력합니다.
참고: map을 활용한 대안
동일한 작업은 map() 함수와 operator 모듈의 mul 함수를 조합해서도 구현할 수 있습니다.
from operator import mul my_result = tuple(map(mul, my_tuple_1, my_tuple_2)) print(my_result) # (2047, 1845, 912, 0, 858)
두 방법 모두 성능 차이는 미미하므로, 코드의 가독성과 상황에 맞는 스타일을 기준으로 선택하면 됩니다.