파이썬 2차원 리스트


2차원 리스트는 리스트를 원소로 가지는 리스트 일 뿐이다.

matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

# 이차원 리스트는 행렬(matrix)이다.
matrix = [
  [1, 2, 3],
  [4, 5, 6],
  [7, 8, 9]
]

print(matrix[0][0])
# 1
print(matrix[1][2])
# 6
print(matrix[2][0])
# 7


특정 값으로 초기화 된 이차원 리스트 만들기

matrix = [
  [0, 0, 0],
  [0, 0, 0],
  [0, 0, 0],
  [0, 0, 0]
]
# 100*100 이라면?
from pprint import pprint
matrix = []

for _ in range(100):
  matrix.append([0]*100)
pprint(matrix)

# 반복문으로 작성 (n*m 행렬)
n = 4 # 행
m = 3 # 열
for _ in range(n):
  matrix.append([0] * m)
  
print(matrix)
# [[0, 0, 0], 
#  [0, 0, 0], 
#  [0, 0, 0], 
#  [0, 0, 0]]

# List Comprehension
n = 10 # 행의 개수
m = 10 # 열의 개수

matrix = [[0] * m for _ in range(n)] 


[주의] 리스트 컴프리헨션 vs 리스트 곱셈 연산

아래의 코드 둘은 결과가 같아보이지만 matrix2는 같은 주소값을 가르키기 때문에 값이 변경되면 전부 똑같이 변경된다. 리스트 컴프리헨션을 쓰도록 하자.

from pprint import pprint
n = 3
m = 3
# 1
matrix1 = [[0] * m for _ in range(n)]
pprint(matrix1)
# 2
matrix2 = [[0] * m]*n
pprint(matrix2)


M x N 의 2차원 리스트 입력받기

# M x N 의 리스트 입력받기 
matrix = []
N, M = map(int, input().split())
for _ in range(N):
    line = list(map(int, input().split()))
    matrix.append(line)
pprint(matrix)

# M x N 의 리스트 입력받기 컴프리헨션
N, M = map(int, input().split())
matrix = [list(map(int, input().split())) for _ in range(N)]
pprint(matrix)

관심있을 포스팅