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

Python 튜플 곱셈 방법 – zip과 제너레이터 표현식 활용하기

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)

두 방법 모두 성능 차이는 미미하므로, 코드의 가독성과 상황에 맞는 스타일을 기준으로 선택하면 됩니다.