Algorithm

[Python] zip 함수 정리

jungeun919 2024. 7. 30. 12:19

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]

 

관련 알고리즘 풀기