티스토리 뷰

파이썬 2차원 배열(리스트)를 뒤집어보자.

 

2중 for문으로 뒤집기

새로운 리스트를 만들고 기존 리스트의 행과 열을 이중 for문으로 뒤집어 넣는다.

board = [[1, 2, 3],[4, 5, 6],[7, 8, 9]]
N = len(board)

new_board = [[]*N for _ in range(N)]
for r in range(N):
    for c in range(N):
        new_board[r].append(board[c][r])
        
# [[1, 4, 7], [2, 5, 8], [3, 6, 9]]

 

zip 함수와 upacking으로 뒤집기

zip 내장함수는 두 개의 iterable한 자료형을 합쳐주는 함수이다.

기존 이차원 리스트를 * unpacking하고 각각에서 차례대로 아이템을 하나씩 꺼내 튜플을 만든다.

 

파이썬 공식 문서

>>> for item in zip([1, 2, 3], ['sugar', 'spice', 'everything nice']):
...     print(item)
...
(1, 'sugar')
(2, 'spice')
(3, 'everything nice')

 

과정

1. 리스트 언패킹으로 괄호 제거

2. zip([], [], []) : zip 함수 내에 3개씩의 정수를 가진 세 개의 리스트가 들어가있는 형태

3. 각각의 리스트에서 한개씩 꺼내 3개의 튜플을 반환

4. map 함수로 리스트화

board = [[1, 2, 3],[4, 5, 6],[7, 8, 9]]
N = len(board)

print(*board)
# [1, 2, 3] [4, 5, 6] [7, 8, 9]

print(list(zip(*board)))
# [(1, 4, 7), (2, 5, 8), (3, 6, 9)]

print(list(map(list, zip(*board))))
# [[1, 4, 7], [2, 5, 8], [3, 6, 9]]

 

 

 

 

참고사이트 https://programmers.co.kr/learn/courses/4008/lessons/13318

댓글