2차원 배열 열 추출
2차원 배열에서 각 행을 추출하는 방법은 간단하다. 2차원 배열은 배열이 원소이기 때문에 각 원소인 배열을 통으로 출력하면 되기 때문이다.
a = [
[0, 1],
[2, 3],
[4, 5],
[6, 7],
[8, 9],
]
for i in range(5):
print(a[i])
그렇다면 배열 내 배열의 원소에 접근해야 하는 열의 경우에는 어떻게 추출할 수 있을까? 방법을 몇 가지 정리해둔다.
리스트 컴프리헨션
리스트 컴프리헨션을 이용해 각 행에서 n번째의 원소만을 뽑아낸다.
a = [
[0, 1],
[2, 3],
[4, 5],
[6, 7],
[8, 9],
]
print([t[0] for t in a])
print([t[1] for t in a])
반복문을 이용해 모든 열을 뽑을 때는 아래와 같이 할 수 있다.
for j in range(len(a[0])):
print([t[j] for t in a])
zip 함수 사용
zip 함수는 여러 개의 iterable 한 객체를 인자로 받아, 각 객체가 담고 있는 원소를 튜플의 형태로 접근하는 iterator를 반환한다.
a = [
[0, 1],
[2, 3],
[4, 5],
[6, 7],
[8, 9],
]
for p in zip(a[0], a[1]):
print(p)
즉, a의 모든 행을 zip의 매개변수로 전달하면 열에 해당하는 데이터를 반환받을 수 있다.
a = [
[0, 1],
[2, 3],
[4, 5],
[6, 7],
[8, 9],
]
for p in zip(*a):
print(p)
numpy 사용
배열을 numpy의 array로 전환하여 전치(transpose)시킨 후 인덱싱하는 방법도 있다.
import numpy as np
b = np.array(a)
for i in range(len(a[0])):
print(b.T[i])
pandas 사용
2차원 배열을 데이터 프레임으로 변환한 후 각 열을 취하는 방법이다.
import pandas as pd
b = pd.DataFrame(a)
for i in range(len(a[0])):
print(b[i].to_list())
참고 문서
https://maktubi.tistory.com/93