Zip 객체
1. 개요
- zip() 함수에 둘 이상의 iterable한 객체를 인자로 넣으면 i번째 행의 각 원소가 zip() 함수에 인자로 넣어진 객체들의 i번째 원소인 새로운 객체가 리턴된다. 이때 리턴되는 객체가 zip 객체로, 이 역시 iterable하므로 여러 방식으로 활용이 가능하다. 대표적으로, for 구문의 in 뒤에 객체로 넣는 경우가 있다.
1
2
3
4
5
6
7
list1 = [1, 2, 3, 4, 5]
tup1 = (1, 4, 9, 16, 25)
str1 = "abcde"
zip1 = zip(list1, tup1, str1)
for e1, e2, e3 in zip1:
print(e1, e2, e3)
2. unzip
- 함수에 2차원 객체를 인자로 넣으면서 앞에 *를 붙이면 그 객체는 * 연산자로 인해 unpack이 된다. 만약 이를 zip() 함수의 인자로 넣으면, zip() 함수에 의해 * 연산을 하기 전과 행과 열이 뒤바뀐 새로운 객체를 리턴하게 된다.
1
list2, tup2, str2 = zip(*zip1)
- 위 코드 같이 쉼표를 이용한 대입식으로 unzip한 객체를 서로 다른 변수에 나눠 대입할 수 있다. 단, 이 경우 대입식의 좌변에는 unzip된 zip 객체의 행의 수만큼 변수를 적어야 한다.
3. 주의사항
- zip 객체를 딕셔너리형으로 형변환하는 경우에는, zip 객체를 만들 때 넣은 인자 수가 둘뿐이어야 한다.
- zip() 함수에 넣은 인자의 길이가 서로 다른 경우에는 길이가 짧은 인자까지만 zip 연산이 일어나며 길이가 긴 쪽의 그 이후의 부분은 무시된다.