zip 함수
zip 함수는 iterable 객체를 인자로 받아 동일한 인덱스의 요소를 튜플로 묶어서 반환한다.
python에서 iterable한 자료형으로 리스트, 튜플, 문자열 등이 있다.
nums = [1, 2, 3]
char = ['a', 'b', 'c']
pairs = zip(nums, char)
print(list(pairs)) # [(1, 'a'), (2, 'b'), (3, 'c')]
zip 함수로 넘기는 인자의 길이가 다를 경우, 가장 짧은 인자의 길이에 맞춰서 반환한다.
list1 = [1, 2, 3]
list2 = ['a', 'b']
list3 = [True, False, True, False]
pairs = zip(list1, list2, list3)
print(list(pairs)) # [(1, 'a', True), (2, 'b', False)]
unzip
* 연산자는 iterable 요소를 풀어주는 역할을 한다.
pairs = [(1, 'a'), (2, 'b'), (3, 'c')]
unzipped = zip(*pairs)
print(list(unzipped)) # [(1, 2, 3), ('a', 'b', 'c')]
zip(*pairs)는 pairs 리스트의 첫 번째 요소들을 묶고, 두 번째 요소들을 묶는 방식으로 동작한다.
전치행렬 생성
전치행렬은 행과 열을 교환하여 얻어낸 행렬을 말한다.
A^T로 표기하며, A의 i행 j열의 요소가 A^T의 j행 i열의 요소가 된다.
여기서 map과 zip 함수를 활용하여 전치행렬을 구현할 수 있다.
arr = [[1, 2, 3],
[4, 5, 6],
[7, 8, 9]]
transpose_arr = list(map(list, zip(*arr)))
print(transpose_arr)
# transpose_arr
# 1 4 7
# 2 5 8
# 3 6 9
# 과정
zip(*arr) # (1, 4, 7) (2, 5, 8) (3, 6, 9)
map(list, zip(*arr)) # [1, 4, 7] [2, 5, 8] [3, 6, 9]