2차원 리스트에서 가장 기본적인 연산은 행의 합계나 열의 합계일 것입니다.
엑셀에서의 작업을 떠올리면 됩니다. 1번째 행의 합계를 계산해보면 다음과 같습니다.
s = [ [1, 2, 3, 4, 5], [6, 7, 8, 9, 10], [11, 12, 13, 14, 15] ]
cols = len(s[0])
sum = 0
for c in range(cols): # 1번째 행의 합을 계산한다.
sum += s[1][c]
print(sum)
<실행 결과>
40
2차원 리스트는 이미지를 처리할 때도 사용됩니다. 이미지도 본질적으로 각 화소(픽셀)의 값을 2차원적으로 나열한 것이기 때문입니다.
하나의 화소에서 이웃 화소들의 인덱스를 찾아봅시다. 즉 화소의 위치가 (r, c)라고 했을 때, 상하좌우에 있는 화소들의 인덱스는 다음과 같습니다.
| (r-1, c-1) | (r-1, c) | (r-1, c+1) |
| (r, c-1) | (r, c) | (r, c+1) |
| (r+1, c-1) | (r+1, c) | (r+1, c+1) |
2차원 리스트도 객체이므로 함수로 전달할 수 있습니다. 만약 함수에서 리스트를 변경하면 원본 리스트가 변경됩니다.
하나의 예로 다음과 같이 1과 0이 반복되는 체커보드 형태의 10x10 크기의 2차원 리스트를 초기화하는 함수 init()를 작성하고 테스트해봅시다.
table = []
# 2차원 리스트를 화면에 출력합니다.
def printList(myList):
for row in range(len(myList)):
for col in range(len(myList[0])):
print(myList[row][col], end=" ")
print()
# 2차원 리스트를 체커보드 형태로 초기화합니다.
def init(myList):
for row in range(len(myList)):
for col in range(len(myList[0])):
if (row+col)%2 == 0: # (row + col)이 짝수이면 1을 저장합니다.
table[row][col] = 1
# 2차원 리스트를 생성합니다.
for row in range(10):
table += [[0]*10] # 0으로 초기화된 2차원 리스트를 생성합니다.
init(table)
printList(table)
<실행 결과>
1 0 1 0 1 0 1 0 1 0
0 1 0 1 0 1 0 1 0 1
1 0 1 0 1 0 1 0 1 0
0 1 0 1 0 1 0 1 0 1
1 0 1 0 1 0 1 0 1 0
0 1 0 1 0 1 0 1 0 1
1 0 1 0 1 0 1 0 1 0
0 1 0 1 0 1 0 1 0 1
1 0 1 0 1 0 1 0 1 0
0 1 0 1 0 1 0 1 0 1