기록하는삶

[파이썬/Python] 리스트, 배열(list) 전치(transpose) 본문

AI/파이썬(Python)

[파이썬/Python] 리스트, 배열(list) 전치(transpose)

mingchin 2021. 11. 11. 18:20
728x90
반응형

numpy array는 transpose라는 함수를 제공하지만, list의 경우 내장된 전치함수가 없다. 이를 zip 함수를 이용해 간단히 구현할 수 있다.

다음과 같은 이중리스트가 있다면, 이는 3*3 행렬과 같은 형태이다.

원래 zip 함수는 iterable한 객체의 원소들을 짝지어주는 함수이다. 그런데 인자로 *(iterable)을 전달하면, 헤당 iterable한 객체가 내부적으로 가지고 있는 원소가 또 다시 iterable한 경우에 한해, 각 원소들의 인자들을 순서대로 짝지어준다.

즉, 위의 예시에서는 3개의 원소의 1번인자, 2번인자, 3번인자를 순서대로 짝지어 각각 (1,4,7), (2,5,8), (3,6,9)를 반환했다.

 

내부 원소들이 iterable이 아닌 경우는 다음과 같이 에러를 반환하고,

내부 원소들의 length가 다른 경우, 가장 짧은 length를 기준으로 가능할 때까지 짝지어 그 결과를 반환한다.

 

이 점을 이용하면 아래와 같이 transpose가 가능한 형태에 대해 그 결과를 쉽게 구해볼 수 있다.

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

# numpy 없이 list의 transpose 구하기
a = [[1,2,3], [4,5,6],[7,8,9]]
b = [list(x) for x in zip(*a)]
print(b)
728x90
반응형