욤미의 개발일지
[Python] 2차원 리스트 90도 회전 본문
728x90
반응형
[Python] 2차원 리스트 90도 회전
2차원 리스트 90도 회전
90도 회전했을 때 행, 열이 변하는 규칙을 정리하면 다음과 같다.
- 회전한 후 행 번호 = 회전하기 전 열 번호
- 회전한 후 열 번호 = N - 1 - 회전하기 전 행 번호
이러한 규칙을 코드로 나타내면 다음 코드와 같다.
리스트를 시계방향으로 90도 회전하는 일반적인 방법
def rotated(array_2d):
n = len(array_2d) # 행 길이
m = len(array_2d[0]) # 열 길이
result = [[0] * n for _ in range(m)] # 회전한 결과를 표시하는 배열
for i in range(n):
for j in range(m):
result[j][n-i-1] = array_2d[i][j]
return result
리스트 회전은 zip함수를 사용하여 구현할 수도 있다.
zip함수를 사용하는 방법
def rotated(array_2d):
list_of_tuples = zip(*array_2d[::-1])
return [list(e) for e in list_of_tuples]
위 코드의 자세한 동작과정은 다음과 같다.
1. 배열을 역순으로 바꾼다.
array_2d = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
reversed_ = array_2d[::-1]
print(reversed_)
# [[7, 8, 9], [4, 5, 6], [1, 2, 3]]
2. 2차원 배열의 인자를 별표(*, Asterisk)로 unpacking하고 zip()으로 묶어준다.
- unpacking은 괄호 안에 있던 데이터들을 풀어 각각으로 만들어 준다.
- zip()은 각 인자들을 tuple로 묶어 zip object로 반환한다.
list_of_tuples = zip(*array_2d[::-1])
print(list_of_tuples)
# <zip object at 0x7f16a09c1540>
3. tuple로 반환되는 요소를 리스트로 바꾸어준다.
return [list(e) for e in list_of_tuples]
# [[7, 4, 1], [8, 5, 2], [9, 6, 3]]
180도 회전
def rotated(list_2d):
n = len(list_2d)
m = len(list_2d[0])
result = [[0] * n for _ in range(m)]
for i in range(n):
for j in range(m):
result[m-j-1][n-i-1] = list_2d[i][j]
return result
270도 회전
-90도 회전하는 것과도 같다. 또는 180 + 90도 회전으로 이해할 수 있다.
def rotated(list_2d):
n = len(list_2d)
m = len(list_2d[0])
result = [[0] * n for _ in range(m)]
for i in range(n):
for j in range(m):
result[m-j-1][i] = list_2d[i][j]
return result
리스트 회전을 이용하는 문제
728x90
반응형
'Python' 카테고리의 다른 글
[Python] Split - 문자열을 리스트로 만들기 (1) | 2022.09.23 |
---|---|
[Python] Join - 리스트를 문자열로 만들기 (0) | 2022.09.23 |
[Python] 2차원 리스트 - 인덱싱, 선언 방법 (0) | 2021.08.09 |
[Python] 문자열 자료형 (0) | 2021.08.09 |
[Python] Packing & Unpacking (0) | 2021.07.31 |
Comments