상위 목록: 하위 목록: 작성 날짜: 읽는 데 9 분 소요

집(zip) 함수

집(zip) 함수는 길이가 같은 반복 가능한 데이터(목록, 사전 등)를 하나로 묶어 반환하는 함수입니다.

주로, 형태가 다른 값들을 하나의 구조나 변수로 활용하기 위해 사용합니다.

집 함수는 결괏값 = map(범위 1, 범위 2, ...)의 형태로 사용합니다.

목록(list), 집합(set), 사전(dict) 등을 묶어 결과를 반환합니다.



함수 생성

a = "YUN"
b = [1, 2, 3]
c = ("하나", "둘", "셋")

print(list(zip(a, b, c)))
print(set(zip(a, b, c)))
print(dict(zip(a, b)))
결과
[(‘Y’, 1, ‘하나’), (‘U’, 2, ‘둘’), (‘N’, 3, ‘셋’)]
{(‘Y’, 1, ‘하나’), (‘N’, 3, ‘셋’), (‘U’, 2, ‘둘’)}
{‘Y’: 1, ‘U’: 2, ‘N’: 3}

zip(자료형1, 자료형2, ....)을 사용하여 묶어 결과를 반환합니다.

집(zip) 함수는 list() 또는 set() 등의 구문을 추가하지 않으면 <zip object at 0x0506C940> 등의 iterator 형태로 출력됩니다.

dict()의 경우 keyvalue로 구성되어 있으므로 3개 이상은 묶을 수 없습니다.



반복문 적용

L1 = ["A", "B", "C", "D"]
L2 = ["가", "나", "다", "라"]


for i, j in zip(L1, L2):
    print(i, j)
결과
A 가
B 나
C 다
D 라

집(zip) 함수는 서로 다른 자료형을 하나로 묶을 수 있기 때문에, 두 종류 이상의 색인(index)을 반복할 수 있습니다.

이 특성으로 인해, 다중 반복문(중첩 반복문)을 사용하지 않고 하나의 반복문으로 간소화 할 수 있습니다.



언패킹(Unpacking) / 패킹(Packing)

numbers = [[1, 2, 3], [4, 5, 6]]

print(*numbers)
print(list(zip(*numbers)))
print(list(zip([1, 2, 3], [4, 5, 6])))
결과
[1, 2, 3] [4, 5, 6]
[(1, 4), (2, 5), (3, 6)]
[(1, 4), (2, 5), (3, 6)]

반복 가능한 객체에 별표(Asterisk, *)를 함께 사용한다면, 언패킹되어 묶여있던 객체들이 나눠지게 됩니다.

즉, 2차원 리스트는 1차원 리스트 만큼 나눠서 반환하게 됩니다.

이 때, 집 함수를 사용하여 다시 패킹한다면 각 원소마다 묶기 때문에 여러 반복문을 구성하지 않아도 다시 패킹 할 수 있습니다.

zip(*n차원 객체)zip(n-1차원 객체1, n-1차원 객체2, ...)로 볼 수 있습니다.

그러므로, 반복 가능한 객체의 원소들을 대상으로 새로운 데이터를 구현할 수 있습니다.

댓글 남기기