본문 바로가기
IT/Python Basic

[Python] 초급 개념27 - 2차원 배열의 이해

by Echinacea 2025. 4. 14.
반응형

 

 

 


 

 

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)]

이 코드는 아래와 같이 동작합니다:

  1. [0] * n은 [0, 0, 0]을 생성합니다.
  2. 이 리스트를 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]
특징 일렬로 나열 행과 열 구조
활용 간단한 목록 표, 지도, 게임판 등 복잡한 구조

 

반응형

댓글