우리는 2차원 테이블을 이용하여 많은 일들을 처리합니다. 예를 들어 학생들의 과목별 성적도 2차원 형태로 나타낼 수 있습니다.
| 학생 | 국어 | 영어 | 수학 | 과학 | 사회 |
|---|---|---|---|---|---|
| 강슬기 | 1 | 2 | 3 | 4 | 5 |
| 배주현 | 6 | 7 | 8 | 9 | 10 |
| 손승완 | 11 | 12 | 13 | 14 | 15 |
파이썬에서는 리스트를 2차원으로 만들 수 있습니다. 다른 언어에서도 2차원 리스트를 제공합니다.
# 2차원 리스트를 생성합니다.
s = [
[ 1, 2, 3, 4, 5 ],
[ 6, 7, 8, 9, 10 ],
[ 11, 12, 13, 14, 15 ]
]
print(s)
<실행 결과>
[[1, 2, 3, 4, 5], [6, 7, 8, 9, 10], [11, 12, 13, 14, 15]]
위의 코드에서 리스트 [ 1, 2, 3, 4, 5 ] 가 첫 번째 행을 나타내고 리스트 [ 6, 7, 8, 9, 10 ] 이 두 번째 행을 나타냅니다.

위의 2차원 리스트는 초기값이 미리 결정되어 있어 정적으로 생성되었습니다.
실제로는 동적으로 2차원 리스트를 생성하는 경우가 더 많습니다. 리스트의 크기가 매우 큰 경우에도 동적으로 생성하여야 합니다.
# 동적으로 2차원 리스트를 생성합니다.
rows = 3
cols = 5
s = []
for row in range(rows):
s += [[0] * cols]
print("s = ", s)
<실행 결과>
s = [[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]
앞에서 학습한 리스트 함축을 사용하여도 됩니다.
# 동적으로 2차원 리스트를 생성합니다.
rows = 3
cols = 5
s = [ ([0] * cols) for row in range(rows) ]
print("s = ", s)
2차원 리스트에서 요소에 접근하려면 2개의 인덱스 번호를 지정하여야 합니다. 첫 번째 번호가 행 번호이고 두 번째 번호가 열 번호가 됩니다.
예를 들어 2차원 리스트 s에서 2번째 행의 1번째 열에 있는 요소는 s[2][1]가 됩니다.
2차원 리스트에 저장된 모든 값을 출력하려면 아래와 같이 이중 루프를 사용하여야 합니다.
# 2차원 리스트를 생성합니다.
s = [
[ 1, 2, 3, 4, 5 ],
[ 6, 7, 8, 9, 10 ],
[ 11, 12, 13, 14, 15 ]
]
# 행과 열의 개수를 구합니다.
rows = len(s)
cols = len(s[0])
for r in range(rows):
for c in range(cols):
print(s[r][c], end=",")
print()
<실행 결과>
1,2,3,4,5,
6,7,8,9,10,
11,12,13,14,15,
여기서 len(s)는 행의 개수이고 len(s[0])은 첫 번째 행에 들어 있는 열의 개수입니다.
리스트 안에 다른 리스트를 내장하는 것도 가능합니다. 이것은 실제 프로그래밍에서 많이 사용됩니다.
a = ['a', 'b', 'c']
n = [1, 2, 3]
x = [a, n] # 리스트 x 안에 리스트 a와 n이 들어 있습니다.
print(x)
<실행 결과>
[['a', 'b', 'c'], [1, 2, 3]]
간단한 테이블 형태의 데이터를 2차원 리스트로 표현해봅시다. 2개의 주사위를 굴리면 다음 표와 같이 36가지의 결과가 나옵니다.
이것을 이중 루프를 이용하여 6x6 크기의 2차원 리스트로 생성하여 봅시다.
<실행 결과>
[2, 3, 4, 5, 6, 7]
[3, 4, 5, 6, 7, 8]
[4, 5, 6, 7, 8, 9]
[5, 6, 7, 8, 9, 10]
[6, 7, 8, 9, 10, 11]
[7, 8, 9, 10, 11, 12]