Python 기초

2차원 리스트란?

우리는 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]