3D 리스트란 3차원 배열을 의미합니다. 행(row), 열(column), 깊이(depth)의 세 가지 차원으로 구성된 자료구조로, 과학 계산, 이미지 처리, 게임 개발 등 다양한 분야에서 활용됩니다. 이 글에서는 파이썬을 사용해 정수 요소를 담을 수 있는 3차원 배열을 생성하는 방법을 단계별로 살펴보겠습니다.
예제
입력: 3 × 3 × 2 [[1,1,1],[2,2,2],[3,3,3]], [[4,4,4],[5,5,5],[6,6,6]]
알고리즘
Step 1: 3D 리스트의 크기(차원)를 지정합니다. Step 2: for 반복문을 사용하여 리스트를 생성하고 데이터를 출력합니다.
예제 코드
# 파이썬 프로그램: 3D 리스트 생성하기
import pprint
def print3D(i, j, k):
lst = [[['*' for cc1 in range(i)] for cc2 in range(j)] for r in range(k)]
return lst
# 드라이버 코드(Driver Code)
c1 = 3
c2 = 2
r = 2
# pprint 함수로 보기 좋게 출력
pprint.pprint(print3D(c1, c2, r))
출력 결과
[[['*', '*', '*'], ['*', '*', '*']], [['*', '*', '*'], ['*', '*', '*']]]
코드 설명
위 코드가 어떻게 동작하는지 핵심 부분을 하나씩 살펴보겠습니다.
1. 중첩 리스트 컴프리헨션
이 코드의 핵심은 세 겹으로 중첩된 리스트 컴프리헨션(list comprehension)입니다.
- 가장 안쪽
for cc1 in range(i): 각 행에 들어갈 요소를 생성합니다. 여기서는 '*' 문자를 채우지만, 원한다면 정수나 다른 값으로 자유롭게 대체할 수 있습니다. - 중간
for cc2 in range(j): 안쪽 리스트들을 묶어 하나의 평면(2차원 구조)을 만듭니다. - 바깥쪽
for r in range(k): 평면들을 다시 묶어 최종적인 3차원 구조를 완성합니다.
2. pprint 모듈의 역할
pprint(pretty print) 모듈은 복잡하게 중첩된 자료구조를 사람이 읽기 쉬운 형태로 출력해 줍니다. 일반 print() 함수와 달리 들여쓰기를 자동으로 적용해 주기 때문에, 다차원 리스트의 구조를 확인할 때 특히 유용합니다.
3. 원하는 크기로 변경하기
변수 c1, c2, r의 값만 조정하면 원하는 크기의 3D 리스트를 손쉽게 만들 수 있습니다. 예를 들어 c1=4, c2=4, r=3으로 설정하면 4×4×3 크기의 3차원 배열이 생성됩니다.
마무리
이처럼 파이썬에서는 중첩 반복문 또는 리스트 컴프리헨션만으로도 간단히 3차원 리스트를 만들 수 있습니다. 다만 대규모 수치 연산이나 빠른 성능이 필요하다면 NumPy 라이브러리의 np.zeros(), np.arange().reshape() 같은 함수를 활용하는 것이 훨씬 효율적이니 참고하세요.