Python 프로그래밍에서 중첩된 튜플(nested tuple)을 N*N 크기의 행렬 형태로 변환해야 하는 경우가 종종 있습니다. 이럴 때 간단한 반복문과 * 연산자를 활용하면 손쉽게 해결할 수 있습니다.
* 연산자는 두 값의 곱을 계산할 때 사용되지만, 하나의 값을 여러 번 반복하여 시퀀스를 생성하는 용도로도 활용할 수 있습니다. 이 특성을 이용하면 부족한 자릿수만큼 0을 채워 넣어 정방행렬(square matrix) 형태로 만들 수 있습니다.
아래 예제를 통해 구체적인 구현 방법을 살펴보겠습니다.
예제 코드
my_tuple_1 = ((11, 14), (0, 78), (33, 11), (10, 78))
print("튜플의 튜플은 다음과 같습니다 : ")
print(my_tuple_1)
N = 4
print("N의 값이 " + str(N) + "으로 초기화되었습니다.")
my_result = []
for tup in my_tuple_1 :
my_result.append(tup + (0, ) * (N - len(tup)))
print("값을 채운 후의 튜플은 다음과 같습니다: ")
print(my_result)실행 결과
튜플의 튜플은 다음과 같습니다 : ((11, 14), (0, 78), (33, 11), (10, 78)) N의 값이 4으로 초기화되었습니다. 값을 채운 후의 튜플은 다음과 같습니다: [(11, 14, 0, 0), (0, 78, 0, 0), (33, 11, 0, 0), (10, 78, 0, 0)]
코드 설명
- 먼저 중첩된 튜플(nested tuple)을 정의하고 콘솔에 출력합니다.
- 목표 행렬의 크기를 나타내는 'N' 값을 정의하고 화면에 표시합니다.
- 변환 결과를 저장할 빈 리스트를 하나 생성합니다.
- 중첩된 튜플을 순회(iterate)하면서, 각 튜플의 길이가 N에 미치지 못하는 만큼(
N - len(tuple)) 0으로 이루어진 튜플을 뒤에 덧붙입니다. - 이렇게 완성된 각 행(row)을 결과 리스트에 추가합니다.
- 최종 결과를 콘솔에 출력합니다.
핵심 포인트 정리
이 기법의 핵심은 (0, ) * (N - len(tup)) 부분입니다. 튜플에 정수를 곱하면 해당 튜플이 지정된 횟수만큼 반복되는데, 이를 통해 길이가 짧은 튜플에 0을 자동으로 채워 넣어 모든 행의 길이를 N으로 맞출 수 있습니다. 결과적으로 각 요소가 4개씩인 균일한 행렬 구조가 완성됩니다.
참고로, 리스트 컴프리헨션(list comprehension)을 사용하면 동일한 로직을 한 줄로 더 간결하게 표현할 수도 있습니다.
my_result = [tup + (0, ) * (N - len(tup)) for tup in my_tuple_1]