Python 2차원 배열 선언 시 * 연산자 사용

  


예제 코드

a = [[1, 2, 3, 4], [5, 0, 7, 8], [4, 5, 2, 0]]
b = [[0] * 4] * 3
c = [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]

print('a : ', a)
print('b : ', b)
print('c : ', c)

print(a[1] == a[2])

b[1][1] = a[1][3]
print(b)
print(b[1] == b[2])

c[1][1] = a[1][3]
print(c)
print(c[1] == c[2])

파이썬에서 2차원 배열 문제를 해결할 때

이중 리스트 구조의 데이터구조를 많이 활용한다.


0으로 초기화 되는 배열을 선언할 때,

b처럼 선언하면 동일한 리스트로 인식되어버려서 

b[0], b[1]의 eq 연산이 True를 반환하고


b[0][2]의 값을 변경해도 그대로 b[1], b[2]...에 반영된다.

때문에 * 를 지양하고 for 문을 돌면서 선언해주는 것이 바람직함.




출력 결과

a :  [[1, 2, 3, 4], [5, 0, 7, 8], [4, 5, 2, 0]]
b :  [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
c :  [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
False
[[0, 8, 0, 0], [0, 8, 0, 0], [0, 8, 0, 0]]
True
[[0, 0, 0, 0], [0, 8, 0, 0], [0, 0, 0, 0]]
False

댓글

이 블로그의 인기 게시물

실무진 면접 경험으로 정리하는 백엔드 (1) : 에듀 테크 기업 면접

노마드코더 개발자북클럽 Clean code 완주, 독후감

Blogger 커스터마이징 : CSS 수정 (sticky-header)