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

Python에서 한 튜플의 요소를 다른 튜플의 지수로 거듭제곱하는 방법

Python에서 한 튜플의 각 요소를 다른 튜플의 대응하는 요소를 지수로 삼아 거듭제곱해야 하는 경우가 있습니다. 이럴 때 zip 함수와 제너레이터 표현식을 함께 사용하면 매우 간결하게 처리할 수 있습니다.

핵심 개념 정리

zip 함수는 여러 개의 반복 가능한(iterable) 객체를 인자로 받아, 각 객체에서 같은 위치에 있는 요소들을 하나씩 묶어 튜플 형태로 집계한 뒤 그 결과를 반환합니다. 덕분에 두 시퀀스를 병렬로 순회할 때 널리 사용됩니다.

제너레이터(Generator)는 이터레이터를 손쉽게 만들 수 있는 방법입니다. 내부적으로 '__iter__()'와 '__next__()' 메서드가 구현된 클래스를 자동으로 생성하고, 내부 상태를 스스로 추적하며, 더 이상 반환할 값이 없으면 'StopIteration' 예외를 발생시킵니다. 제너레이터 표현식을 사용하면 불필요한 중간 리스트를 만들지 않아 메모리 측면에서도 효율적입니다.

예제 코드

my_tuple_1 = (7, 8, 3, 4, 3, 2)
my_tuple_2 = (9, 6, 8, 2, 1, 0)

print("첫 번째 튜플은 : ")
print(my_tuple_1)
print("두 번째 튜플은 : ")
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("한 튜플을 다른 튜플의 지수로 거듭제곱한 결과는 : ")
print(my_result)

실행 결과

첫 번째 튜플은 :
(7, 8, 3, 4, 3, 2)
두 번째 튜플은 :
(9, 6, 8, 2, 1, 0)
한 튜플을 다른 튜플의 지수로 거듭제곱한 결과는 :
(40353607, 262144, 6561, 16, 3, 1)

동작 원리 설명

  • 두 개의 튜플을 정의한 뒤 콘솔에 출력합니다.
  • 'zip' 메서드를 사용해 두 튜플을 병렬로 묶어 순회합니다.
  • '**' 연산자를 통해 첫 번째 튜플의 요소를 두 번째 튜플의 대응 요소만큼 거듭제곱합니다. 예를 들어 7⁹ = 40353607, 8⁶ = 262144가 됩니다.
  • 생성된 값들을 'tuple()' 함수로 감싸 최종 결과를 튜플 형태로 만듭니다.
  • 연산 결과를 변수에 할당한 후 콘솔에 출력합니다.

추가 팁

zip 함수는 전달된 이터러블 중 가장 짧은 길이를 기준으로 동작하므로, 두 튜플의 길이가 다르면 초과되는 요소들은 무시됩니다. 또한 Python 3.10 이상에서는 'strict=True' 옵션을 사용해 길이가 일치하지 않을 경우 오류를 발생시킬 수도 있습니다. 동일한 작업은 'map(pow, my_tuple_1, my_tuple_2)'와 같이 map 함수를 활용해서도 구현할 수 있습니다.