반응형
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)**이 완성됩니다!
🎯 전체 과정 정리
- *arr는 행렬의 각 행을 개별 리스트로 언패킹한다.
- zip(*arr)는 같은 인덱스에 있는 요소들을 튜플로 묶어 전치 행렬을 만든다.
- list(map(list, zip(*arr)))를 사용하여 튜플을 리스트로 변환해 최종 행렬을 얻는다.
'Python' 카테고리의 다른 글
[Python]list간 크기 비교 (0) | 2025.03.23 |
---|---|
[Python]zip(*arr)의 전치 과정(Transpose) (0) | 2025.03.23 |
[Python]slice 사용법: [::] (0) | 2025.03.23 |
[Python]collections.Counter을 사용하여 빈도수 확인 (0) | 2025.03.23 |
두 개의 리스트를 zip()으로 묶고, 이를 dict()로 변환하여 딕셔너리를 생성하는 코드 (0) | 2025.03.23 |