본문 바로가기
Programing/Python

행열 transpose - ( zip응용 )

by yooom 2023. 10. 7.

2차원 행열이 다음처럼 주어져있다고 하자.

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

이중 for을 써서 행열을 뒤집을 수 있다.

new_arr = [[], [], []]

for i in range(len(mylist)):
    for j in range(len(mylist[i])):
        new_arr[i].append(mylist[j][i])
* 연산자의 이해

다른 방법을 알아보기 전에 * 연산자의 이용방법을 하나 알아보자.

a, b, *c, d = 'a', 2, 'e', 4, 5
print(a,b,c,d)
# a 2 ['e',4] 5

 

a,b,*c,d = 1,2,3,4,5
print(a,b,c,d)  # >> 1 2 [3,4] 5

*c는 남은 성분 모두를 받아준다.

 

zip()의 이용
arr = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
for i in zip(arr[0],arr[1],arr[2]):
    print(i)
# (1, 4, 7)
# (2, 5, 8)
# (3, 6, 9)

각 성분의 i열을 묶어서 출력한다.

지금은 튜플 자료형이니 list로 묶으면 2차원 리스트를 만들 수 있다.

한편, arr[0], arr[1]. arr[2]를 쓰는 대신 *를 써서 모든 arr를 받아볼 수 있다.

 

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

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

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

이렇게 짧은 식으로 행열 transpose가 가능하게 된다.

 

728x90

'Programing > Python' 카테고리의 다른 글

Hungaian algorithm  (0) 2023.11.10
Numpy의 boolean 조건으로 index 배열 slicing  (0) 2023.10.03
클래스 상속, super().__init__() -> 오버로딩  (0) 2023.09.25

댓글