3-2 : 2차원 List (2)
작성:
2차원 List (2)
전치행렬
- i,j 성분이 j,i성분으로 바뀐 행렬이다. 2차원 리스트로 구현하면 다음과 같다.
a. 새로운 2차원 List에 할당하여 만드는 방법
# python 예시 - 전치행렬(1): 새로운 2차원 List에 할당
A = [['{0:2d}'.format(i) for i in range(j, j+5)] for j in range(1, 26, 5)]
for i in range(5):
print(*A[i])
transA = [[0 for i in range(5)] for j in range(5)]
for i in range(5):
for j in range(5):
transA[j][i] = A[i][j]
for _ in range(5):
print(*transA[_])
# 출력
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
21 22 23 24 25 # A
1 6 11 16 21
2 7 12 17 22
3 8 13 18 23
4 9 14 19 24
5 10 15 20 25 # transA
b. 기존 List에서 자리 재배치 하는 방법
# python 예시 - 전치행렬(2): 기존 List에서 자리 재배치
A = [['{0:2d}'.format(i) for i in range(j, j+5)] for j in range(1, 26, 5)]
for i in range(5):
print(*A[i])
for i in range(5):
for j in range(i):
A[i][j], A[j][i] = A[j][i], A[i][j]
for i in range(5):
print(*A[i])
# 출력
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
21 22 23 24 25 # A
1 6 11 16 21
2 7 12 17 22
3 8 13 18 23
4 9 14 19 24
5 10 15 20 25 # 변경 후 A
c. 내장함수 zip을 사용하는 방법
# python 예시 - 전치행렬(3): zip 함수 사용
A = [['{0:2d}'.format(i) for i in range(j, j+5)] for j in range(1, 26, 5)]
for i in range(5):
print(*A[i])
transA = list(zip(*A))
for i in range(5):
print(*transA[i])
# 출력
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
21 22 23 24 25 # A
1 6 11 16 21
2 7 12 17 22
3 8 13 18 23
4 9 14 19 24
5 10 15 20 25 # transA
zip 함수를 통해 A의 각 행이 언패킹되어 zip 함수의 인자로 들어간다.
다시 zip함수에 의해 패킹된 요소는 튜플 형식으로 transA에 들어간다.
# python 예시 - zip 함수 요소 형태
A = [['{0:2d}'.format(i) for i in range(j, j+5)] for j in range(1, 26, 5)]
for i in range(5):
print(*A[i])
transA = list(zip(*A))
print(transA)
print(type(transA[0]))
# 출력
>>> [(' 1', ' 6', '11', '16', '21'), (' 2', ' 7', '12', '17', '22'), (' 3', ' 8', '13', '18', '23'), (' 4', ' 9', '14', '19', '24'), (' 5', '10', '15', '20', '25')]
>>> <class 'tuple'>
출처: SW Expert Academy - Learn - Course - Programming Intermediate
댓글남기기