개념
[파이썬 자료구조] 1. 배열 (Array) array — 효율적인 숫자 배열 — Python 3.14.2 문서 매트릭스 구조, built-in 자료형으로도 존재. 여기서는 2차원 리스트로 사용자가 구현하는 방식 위주로 서술
- 차원별 리스트 만들기
-
0차원 리스트
[0 * 10](괄호 안에서 곱하기) 계산: → 결과:[0] -
1차원 리스트
[0] * 10(괄호 밖에서 곱하기) 계산:[0]+[0]+ … (10번 반복) → 결과:[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]→파이썬의*연산자는 “대괄호 안에 있는 내용물”만 복사, 이어 붙인다. -
2차원 리스트
[[0] * 5 for _ in range(3)](리스트 컴프리헨션(List Comprehension)) 1차원 리스트를 for 문 돌려서 여러 번 반복, 예시의 경우 0이 5개 든 개별 리스트 3개 생겨서 묶여있음
중요한 2차원 리스트 input 받기 Input()
주의! 2차원 리스트의 경우 얕은 복사(Shallow Copy)→ List 문서의 “복사”부분 참고
ex)[[0, 0, 0, 0, 0]] * 3
내부에서 같은 리스트 공유 중 → 개별 리스트 1개 뿐
[[]]*5 이런 것도 얕은 복사. 행이 한 줄인 이중 리스트 만들려면
[[] for _ in range (5)] 이런 식으로 range를 무조건 써야 함
# 1. 곱하기로 2차원 리스트 생성
matrix = [[0]] * 3
# matrix = [[0], [0], [0]]
# 2. 나는 "첫 번째 리스트"의 값만 100으로 바꾸고 싶음
matrix[0][0] = 100
# 3. 결과 확인
print(matrix)
# 기대: [[100], [0], [0]]
# 실제: [[100], [100], [100]] <-- 으악!!! 다 바뀜!!!- 전치 행렬 (Transpose matrix)
행과 열 뒤바뀐 90도 회전 느낌, 행과 열 인덱스 같은 좌표들 기준으로 뒤집힘 일단 이중 for문으로 싹 돌면서 대각선 반 틈만 서로 대입해서 바꾸기 (i가 j보다 작거나 큰 경우)
#****
##***
###**
####*
#####
이런 느낌으로 대각선 반 틈만 적용 -> 아래의 "if i<j:" 코드가 있는 이유
모든 좌표에 뒤집기 적용하면 2번 뒤집혀서 원상복구 됨
arr = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] #n, m 모두 3
for i in range (3): #n
for j in range (3): #m
if i<j:
arr[i][j], arr[j][i] = arr[j][i], arr[i][j] #대각선 아래 위 각각을 바꿔줌Zip()함수 써서 손쉽게 만들 수 있음 Zip()