알고리즘 문제를 풀 때 가끔 배열을 회전해야 할 때가 있다.
그래서 오늘은 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')]
리스트의 원소를 하나씩 꺼내서 새로운 리스트를 만든다!
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]
이런 식으로 배열의 인덱스를 조작하여 리스트의 row
와 column
을 뒤집을 수 있다.
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()
을 사용하면 이렇게 한 줄로 간단하게 뒤집을 수 있다!
이번에는 알고리즘 문제를 풀면서 자주 사용하는 90도 회전 코드를 알아보자!
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]
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]
https://wikidocs.net/32#zip
https://programmers.co.kr/learn/courses/4008/lessons/13318
https://ywtechit.tistory.com/171