graph = list(map(list, zip(*graph)))
는 2D 리스트(행렬)를 전치(transpose)하는 코드이다. 즉, 행과 열을 서로 바꾸는 작업을 수행한다. 이 구문을 이해하려면 각 함수의 동작을 하나씩 뜯어볼 필요가 있다.1. zip(*graph)
- *은 언패킹(unpacking) 연산자이다. 이를 통해
graph
의 각 행이 개별 인수로zip
함수에 전달된다.
예를 들어,
graph
가 아래와 같다면:graph = [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ]
zip(*graph)
는 아래와 같은 식으로 동작한다.zip([1, 2, 3], [4, 5, 6], [7, 8, 9])
zip
함수는 전달받은 인수들의 같은 인덱스에 있는 요소를 묶어 튜플로 반환한다.
zip([1, 2, 3], [4, 5, 6], [7, 8, 9]) # 결과: [(1, 4, 7), (2, 5, 8), (3, 6, 9)]
즉,
zip(*graph)
는 각 행(row)을 열(column)로 변환해 준다. 즉, 행렬의 전치가 이루어진 것.2. map(list, zip(*graph))
zip
이 반환하는 것은 튜플이므로, 이를 리스트로 변환하는 작업이 필요하다.
map(list, zip(*graph))
는zip
이 반환한 각 튜플을 리스트로 변환하는 역할을 한다.
즉, 이 단계는
[(1, 4, 7), (2, 5, 8), (3, 6, 9)]
을 [[1, 4, 7], [2, 5, 8], [3, 6, 9]]
으로 변환하는 것이다.3. list(...)
map
객체는 반복 가능한 객체이지만, 이를 리스트로 변환하려면list()
함수가 필요하다.
list(map(list, zip(*graph)))
는 이 결과를 다시 리스트로 감싸서 최종적으로 전치된 2차원 리스트를 반환한다.
요약
graph = list(map(list, zip(*graph)))
는 주어진 graph
행렬을 전치(Transpose)하여, 원래의 행을 열로, 열을 행으로 바꾸는 작업이다.예시
원래의 graph
graph = [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ]
전치된 graph
graph = list(map(list, zip(*graph))) # 결과: [ [1, 4, 7], [2, 5, 8], [3, 6, 9] ]