Python에서 튜플의 각 요소를 하나의 정수로 합쳐야 하는 경우가 있습니다. 예를 들어 (23, 45, 12)라는 튜플을 234512라는 정수로 변환하는 상황이 그렇습니다. 이럴 때 람다(lambda) 함수와 functools 모듈의 reduce 함수를 함께 사용하면 간결하게 해결할 수 있습니다.
람다 함수란?
람다 함수는 이름 없이 정의되는 익명 함수(anonymous function)입니다. 일반적으로 Python에서는 def 키워드로 함수를 정의하지만, 람다 함수는 lambda 키워드를 사용해 한 줄로 정의합니다. 여러 개의 인자를 받을 수 있지만, 하나의 표현식만 가질 수 있으며 해당 표현식의 결과값을 반환합니다.
reduce 함수란?
reduce 함수는 두 개의 매개변수, 즉 함수와 시퀀스(리스트, 튜플 등)를 받습니다. 이 함수는 시퀀스의 모든 요소에 전달받은 함수를 누적적으로 적용하여 단일한 결과값을 만들어냅니다. reduce는 기본 내장 함수가 아니므로 사용하기 전에 functools 모듈을 임포트해야 합니다.
예제 코드
아래는 튜플을 정수로 변환하는 과정을 보여주는 예제입니다.
import functools
my_tuple_1 = (23, 45, 12, 56, 78, 0)
print("첫 번째 튜플 : ")
print(my_tuple_1)
my_result = functools.reduce(lambda sub, elem: sub * 10 + elem, my_tuple_1)
print("튜플을 정수로 변환한 결과 : ")
print(my_result)실행 결과
첫 번째 튜플 : (23, 45, 12, 56, 78, 0) 튜플을 정수로 변환한 결과 : 2768380
코드 설명
- 필요한 모듈인
functools를 임포트합니다. - 정수로 변환할 튜플을 정의하고 콘솔에 출력합니다.
reduce함수에 람다 함수와 튜플을 인자로 전달하여 호출합니다.- 람다 함수는 튜플의 각 요소에 대해 이전까지의 누적값(
sub)에 10을 곱한 뒤 현재 요소(elem)를 더하는 연산을 수행합니다. 이를 통해 자릿수가 하나씩 늘어나며 숫자가 이어 붙여집니다. - 연산 결과는 변수
my_result에 저장됩니다. - 최종적으로 변환된 정수가 콘솔에 출력됩니다.
대안: 문자열 조합 방식
람다와 reduce 외에도 join과 map을 활용한 방법이 있습니다. 다음 코드처럼 각 요소를 문자열로 바꾼 후 이어 붙이고, 다시 정수로 변환할 수 있습니다.
my_tuple = (23, 45, 12, 56, 78, 0)
result = int(''.join(map(str, my_tuple)))
print(result) # 234512780두 방식 모두 동일한 결과를 얻을 수 있으므로, 코드의 가독성과 상황에 맞는 방법을 선택하면 됩니다.