Python

[Python]zip(*arr)의 전치 과정(Transpose)

Captain Herlock 2025. 3. 23. 21:46
반응형

zip(*arr)의 전치 과정(Transpose)을 단계별로 설명해볼게요.


🎯 zip(*arr)가 어떻게 작동하는지 이해하기

예제 행렬 (arr)

arr = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
]

이 행렬은 다음과 같습니다:

1  2  3
4  5  6
7  8  9

이제 zip(*arr)를 사용하여 행과 열을 바꿔보겠습니다.


🔍 *arr의 역할 (언패킹)

*arr

이 표현은 arr 리스트의 각 행을 개별적으로 꺼내는 역할을 합니다.
즉, 아래와 같이 전달됩니다:

zip([1, 2, 3], [4, 5, 6], [7, 8, 9])

🔄 zip()의 역할 (튜플로 그룹화)

이제 zip() 함수가 같은 인덱스에 있는 요소들을 묶어서 튜플로 변환합니다.

zip([1, 2, 3], [4, 5, 6], [7, 8, 9])

이 과정은 다음과 같습니다:

원래 배열의 인덱스 zip()으로 묶인 튜플

첫 번째 요소들 (1, 4, 7)
두 번째 요소들 (2, 5, 8)
세 번째 요소들 (3, 6, 9)

즉, 결과는:

(1, 4, 7)
(2, 5, 8)
(3, 6, 9)

이렇게 행과 열이 바뀐 형태가 됩니다.


📌 zip(*arr)의 최종 결과를 리스트로 변환

list(zip(*arr))

이렇게 하면 zip()이 생성한 튜플들을 리스트로 변환합니다:

[
    (1, 4, 7),
    (2, 5, 8),
    (3, 6, 9)
]

하지만 우리가 원래 행렬 형태로 유지하려면, 각 튜플을 리스트로 변환해야 합니다.


🔄 최종 변환: map(list, zip(*arr))

list(map(list, zip(*arr)))

각 튜플을 리스트로 변환하면:

[
    [1, 4, 7],
    [2, 5, 8],
    [3, 6, 9]
]

✅ 원래 행렬에서 **행과 열이 바뀐 전치 행렬(Transpose Matrix)**이 완성됩니다!


🎯 전체 과정 정리

  1. *arr는 행렬의 각 행을 개별 리스트로 언패킹한다.
  2. zip(*arr)는 같은 인덱스에 있는 요소들을 튜플로 묶어 전치 행렬을 만든다.
  3. list(map(list, zip(*arr)))를 사용하여 튜플을 리스트로 변환해 최종 행렬을 얻는다.