[Python] zip() 이용해서 2차원 리스트 회전하기

kiteB·2021년 11월 30일
1

Python

목록 보기
1/6
post-thumbnail
post-custom-banner

알고리즘 문제를 풀 때 가끔 배열을 회전해야 할 때가 있다.
그래서 오늘은 zip()을 이용한 배열 회전 방법을 정리해보려고 한다!


[ zip() ]

💡 zip(*iterable)

동일한 개수로 이루어진 자료형을 묶어주는 역할을 하는 함수이다.

  • iterable(반복 가능한) 자료형의 개수가 동일할 때 사용할 수 있다.

예제

a = list(zip([1, 2, 3], [4, 5, 6]))
b = list(zip("abc", "def"))

print(a)
print(b)

# 실행 결과
[(1, 4), (2, 5), (3, 6)]
[('a', 'd'), ('b', 'e'), ('c', 'f')]

리스트의 원소를 하나씩 꺼내서 새로운 리스트를 만든다!


[ 2차원 리스트의 행렬 뒤집기 ]

1. zip()를 사용하지 않는 방법

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

for i in range(len(mylist)):
    for j in range(len(mylist[i])):
        new_list[i].append(mylist[j][i])

for i in mylist:	# 기존 리스트
    print(i)

print()

for i in new_list:	# 회전한 리스트
    print(i)

실행 결과

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

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

이런 식으로 배열의 인덱스를 조작하여 리스트의 rowcolumn을 뒤집을 수 있다.

2. zip()을 사용하는 방법

mylist = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
new_list = list(map(list, zip(*mylist)))

for i in mylist:	# 기존 리스트
    print(i)

print()

for i in new_list:	# 회전한 리스트
    print(i)

실행 결과

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

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

zip()을 사용하면 이렇게 한 줄로 간단하게 뒤집을 수 있다!


[ 2차원 리스트 90도 회전 ]

이번에는 알고리즘 문제를 풀면서 자주 사용하는 90도 회전 코드를 알아보자!

1. 시계 방향으로 회전

mylist = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
new_list = list(map(list, zip(*mylist[::-1])))

for i in mylist:	# 기존 리스트
    print(i)

print()

for i in new_list:	# 회전한 리스트
    print(i)

실행 결과

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

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

2. 반시계 방향으로 회전

mylist = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
new_list = list(map(list, zip(*mylist)))[::-1]

for i in mylist:	# 기존 리스트
    print(i)

print()

for i in new_list:	# 회전한 리스트
    print(i)

실행 결과

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

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

[ 📘 Reference ]

https://wikidocs.net/32#zip
https://programmers.co.kr/learn/courses/4008/lessons/13318
https://ywtechit.tistory.com/171

profile
🚧 https://coji.tistory.com/ 🏠
post-custom-banner

0개의 댓글