
1. 개념 설명
2차원 배열은 리스트 안에 또 다른 리스트가 들어 있는 구조입니다.
한 줄로 쭉 나열된 1차원 배열과는 달리, 행(row)과 열(column)을 가지는 표 형태로 데이터를 다룰 수 있습니다.
이런 배열은 일상에서 자주 사용하는 엑셀 시트, 좌석 배치표, 게임 보드처럼 가로줄과 세로줄로 이루어진 데이터 구조를 표현할 때 유용합니다.
✅ 리스트란 무엇인가요?
파이썬에서 리스트(list)는 여러 값을 하나로 묶어서 저장할 수 있는 자료형입니다.
numbers = [1, 2, 3, 4, 5]
위 코드에서 numbers는 1부터 5까지 숫자를 담고 있는 리스트입니다. 각 값은 인덱스(index)로 접근할 수 있으며, 인덱스는 0부터 시작합니다.
예를 들어 numbers[0]은 1, numbers[2]는 3을 나타냅니다.
✅ 2차원 리스트는 어떻게 생겼나요?
2차원 리스트는 리스트 안에 리스트가 들어 있는 구조입니다.
array = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
위 예시는 3개의 줄(행)과 3개의 칸(열)로 이루어진 2차원 배열입니다.
첫 번째 줄은 [1, 2, 3], 두 번째 줄은 [4, 5, 6], 세 번째 줄은 [7, 8, 9]입니다.
값에 접근하려면 array[행번호][열번호] 형태로 사용합니다.
- array[0][0]은 1 (첫 번째 줄, 첫 번째 값)
- array[2][1]은 8 (세 번째 줄, 두 번째 값)
2. 배열 만들기: 모든 값이 0으로 채워진 2차원 배열
2차원 배열을 직접 하나하나 쓰는 대신, 반복문을 활용하여 만들 수 있습니다.
n = 3
array = [[0] * n for _ in range(n)]
위 코드는 다음과 같은 결과를 만듭니다:
[[0, 0, 0],
[0, 0, 0],
[0, 0, 0]]
여기서 n = 3은 배열의 크기를 의미합니다.
즉, 3줄 3칸(3행 3열)의 배열을 생성한 것입니다.
각 부분을 살펴보면:
- [0] * n 은 [0, 0, 0] 형태의 리스트(1줄)를 만듭니다.
- for _ in range(n) 은 그 줄을 n번 복사해서 전체 구조를 만듭니다.
이런 방식으로 표나 격자 구조를 간단하게 만들 수 있습니다.
3. 코드 예제 및 출력 결과
✅ 배열 선언 및 값 접근
n = 3
array = [[0] * n for _ in range(n)]
print(array[1][2])
→ 결과: 0
✅ 배열의 특정 값 바꾸기
array[0][1] = 7
print(array)
→ 결과:
[[0, 7, 0], [0, 0, 0], [0, 0, 0]]
4. 다양한 배열 선언 예시
✅ 1. 모든 값을 0으로 채우기
n = 3
array = [[0] * n for _ in range(n)]
이 코드는 아래와 같이 동작합니다:
- [0] * n은 [0, 0, 0]을 생성합니다.
- 이 리스트를 for _ in range(n)에 의해 3번 반복해서, 다음과 같은 2차원 리스트를 만듭니다:
[[0, 0, 0],
[0, 0, 0],
[0, 0, 0]]
✅ 2. 숫자를 순서대로 채우기 (값이 채워지는 과정 포함)
n = 3
array = [[i * n + j for j in range(n)] for i in range(n)]
이 코드의 동작 과정을 자세히 설명하면 다음과 같습니다:
- 외부 반복문 for i in range(n)은 행 번호를 의미합니다. (i는 0부터 2까지)
- 내부 반복문 for j in range(n)은 열 번호를 의미합니다. (j는 0부터 2까지)
- 각 칸에 들어갈 값은 i * n + j로 계산됩니다.
🔄 값이 채워지는 과정:
i j i * n + j 생성된 리스트
| 0 | 0 | 0 | [0 |
| 0 | 1 | 1 | 0, 1 |
| 0 | 2 | 2 | 0, 1, 2] |
| 1 | 0 | 3 | [3 |
| 1 | 1 | 4 | 3, 4 |
| 1 | 2 | 5 | 3, 4, 5] |
| 2 | 0 | 6 | [6 |
| 2 | 1 | 7 | 6, 7 |
| 2 | 2 | 8 | 6, 7, 8] |
→ 최종 결과:
[[0, 1, 2],
[3, 4, 5],
[6, 7, 8]]
✅ 3. 랜덤한 숫자로 채우기
import random
n = 3
array = [[random.randint(1, 10) for _ in range(n)] for _ in range(n)]
이 코드는 다음과 같이 동작합니다:
- random.randint(1, 10)은 1부터 10 사이의 정수를 무작위로 하나 생성합니다.
- 이 값을 3번 반복해 한 줄을 만들고, 그것을 3줄 반복하여 전체 배열을 구성합니다.
- 매 실행 시마다 값은 달라질 수 있습니다.
예시 결과:
[[3, 9, 1],
[6, 2, 8],
[7, 4, 5]]
5. 활용 예시
활용 상황 설명
| 지도 만들기 | 0과 1로 안전지역, 위험지역을 표현할 수 있습니다. |
| 게임 만들기 | 오목판, 체스판 등 격자형 게임 보드를 구성할 수 있습니다. |
| 성적표 작성 | 학생별 과목 점수를 저장할 수 있습니다. |
6. 1차원과 2차원 배열 비교
| 구조 | [1, 2, 3] | [[1, 2], [3, 4]] |
| 접근 방법 | array[1] | array[1][1] |
| 특징 | 일렬로 나열 | 행과 열 구조 |
| 활용 | 간단한 목록 | 표, 지도, 게임판 등 복잡한 구조 |
'IT > Python Basic' 카테고리의 다른 글
| [Python] 특수 변수 "__main__": 완전 쉽게 이해하기 (0) | 2025.11.12 |
|---|---|
| [Python] divmod() 함수 (0) | 2025.11.12 |
| [Python] 초급 퀴즈27 - 2차원 배열 (0) | 2025.04.14 |
| [Python] 초급 개념11+ - 문자열 출력과 조작 특집 (0) | 2025.03.31 |
| [Python] 특집 - 십진수와 이진수 변환 (0) | 2025.03.21 |
| [Python] 특집 - lambda 함수 활용법 (0) | 2025.03.19 |
| [python] 파이썬 isdigit() 함수 완벽 가이드 (0) | 2025.03.19 |
| [Python] 특집 - range() 함수로 리스트 다루기 (0) | 2025.03.18 |
댓글