실생활에서 2차원 형태의 표를 자주 마주칠 것이다. 엑셀표로 관리하는 데이터부터 게임 보드까지 모두 2차원 표의 형태를 가지고 있다. 이러한 것들을 파이썬에서는 2차원 리스트를 활용해 구현할 수 있다. 참고로 다른 언어에서도 2차원 배열을 제공하고 있다.
2차원 리스트란?
2차원 리스트는 리스트 안에 리스트가 들어있는 형태를 말한다. 쉽게 말해, 행과 열로 이루어진 표 같은 구조이지. 예를 들어, 체스판이나 바둑판을 생각해 보면 이해하기 쉬울 것이다.
matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
위 예제에서 matrix는 3행 3열의 2차원 리스트이다. 각 내부 리스트가 하나의 행을 나타내고 있다.
2차원 리스트 생성하기
2차원 리스트를 생성하는 가장 직관적인 방법은 직접 중첩된 리스트를 입력하여 생성하는 것이다. 바로 위에서 본 예제처럼 말이다. 하지만 데이터가 천 개, 만 개로 늘어난다면 직접 입력하기란 쉽지 않을 것이다.
위 예제의 2차원 리스트는 값이 9개 뿐이고 초깃값이 미리 결정되어 있어 정적으로 생성되었지만 실제로는 동적으로 생성하는 경우가 많다. 가장 많이 사용하는 방법부터 살펴보자.
# 동적으로 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]]
열이 3개, 행이 5개인 2차원 리스트의 각각의 요소의 값들을 0으로 초기화해 두는 코드이다. 이를 리스트 컴프리헨션을 사용하면 아래와 같이 나타낼 수도 있다. 출력 결과는 동일하다.
rows = 3
cols = 5
s = [([0] * cols) for row in range(rows)]
print("s = ", s)
# s = [[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]
2차원 리스트 접근 및 수정
2차원 리스트에서 요소에 접근하려면 2개의 인덱스 번호를 지정해야 한다. 첫 번째 번호는 행 번호, 두 번째 번호는 열 번호가 된다.
matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
# 첫 번째 행, 두 번째 열의 요소
element = matrix[0][1]
print(element) # 2
위의 코드는 matrix라는 2차원 리스트의 첫 번째 행, 두 번째 열의 요소에 접근하여 출력한다.
특정 요소를 변경하고 싶다면 원하는 위치에 새로운 값을 할당하면 된다.
matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
# 두 번째 행, 세 번째 열의 값을 60으로 변경
matrix[1][2] = 60
print(matrix) # [[1, 2, 3], [4, 5, 60], [7, 8, 9]]
2차원 리스트 순회하기
2차원 리스트에서 각각의 요소를 순회하며 무언가 처리를 하고 싶다면 for 반복문을 중첩해서 사용할 수 있다.
matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
for row in matrix:
for element in row:
print(element, end=' ')
print()
"""
1 2 3
4 5 6
7 8 9
"""
주의할 점 - 깊은 복사 vs 얕은 복사
2차원 리스트는 리스트가 중첩된 구조를 가지고 있기 때문에 얕은 복사를 할 경우 원본과 복사본이 서로 영향을 미치게 된다. 독립적인 복사를 원한다면 copy.deepcopy()를 사용하자. 깊은 복사와 얕은 복사에 대한 자세한 내용은 아래 포스트를 참고!
정리
파이썬의 2차원 리스트는 행과 열로 구성된 데이터를 손쉽게 관리할 수 있는 강력한 도구이다. 생성부터 접근, 수정, 순회까지 다양한 방법을 알고 활용하면 복잡한 데이터도 문제없이 다룰 수 있다. 행렬 연산, 게임 보드 구현, 데이터 테이블 관리 등 다양한 분야에서 2차원 리스트를 활용해 보자.
그럼 20000
'Language > Python' 카테고리의 다른 글
[Python] 파이썬 세트(set) 자료구조 이해하기 (0) | 2025.01.18 |
---|---|
[Python] 파이썬 튜플 이해하기 (1) | 2025.01.17 |
[Python] 파이썬 리스트 컴프리헨션 (리스트 함축, List Comprehension) (0) | 2025.01.16 |
[Python] 파이썬 리스트와 함수 (값으로 호출 vs 참조로 호출) (0) | 2025.01.16 |
[Python] 파이썬 리스트 복사하기 (얕은 복사 vs 깊은 복사) (0) | 2025.01.15 |