21.5 연습문제: 3 차원 리스트 만들기
다음 소스 코드를 완성하여 높이 2, 세로 크기 4, 가로 크기 3인 3차원 리스트를 만드세요.
practice_three_dimensional_list.py
a = [ ] print(a)
실행 결과
[[[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]], [[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]]
정답
[[[0 for col in range(3)] for row in range(4)] for depth in range(2)]
해설
3차원 리스트는 다음과 같이 높이×가로×세로 형태로 이루어져 있습니다.
- 리스트 = [[[값, 값], [값, 값]], [[값, 값], [값, 값]], [[값, 값], [값, 값]]]
- 리스트[높이인덱스][세로인덱스][가로인덱스]
- 리스트[높이인덱스][세로인덱스][가로인덱스] = 값
즉, 가로×세로 평면(2차원 리스트)이 여러 겹 있는 모양입니다. 따라서 한 면을 완성한 뒤 다른 면을 완성하는 방식으로 작성해야 합니다.
먼저 리스트 표현식으로 세로 4, 가로 3인 2차원 리스트를 만드는 방법은 다음과 같습니다.
[[0 for col in range(3)] for row in range(4)]
이렇게 만든 2차원 리스트를 여러 번 반복해주면 3차원 리스트가 됩니다. 여기서는 높이가 2라고 했으므로 for depth in range(2)와 같이 반복합니다. 이때 2차원 리스트가 다시 안쪽 리스트가 될 수 있도록 [ ]로 묶어주어야 합니다.
[[[0 for col in range(3)] for row in range(4)] for depth in range(2)] </코드 만약 for 반복문 사용을 줄이려면 다음과 같이 식 부분에서 리스트를 계속 곱해주면 됩니다. <코드> a = [[[0] * 3 for row in range(4)] for depth in range(2)] b = [[[0] * 3] * 4 for depth in range(2)] c = [[[0] * 3] * 4] * 2
a = [[[0] * 3 for row in range(4)] for depth in range(2)] b = [[[0] * 3] * 4 for depth in range(2)] c = [[[0] * 3] * 4] * 2
물론, 리스트 표현식을 사용하지 않고 [ ] 안에 0과 [ ]를 나열해서 만들어도 됩니다.