파이썬

[Python] zip()/unzip

audwndl 2024. 8. 10. 22:37

파이썬의 zip() 함수는 여러 시퀀스를 병렬로 묶어주는 유용한 함수입니다. 시퀀스란 리스트, 튜플, 문자열처럼 순서가 있는 데이터를 말하는데, zip() 함수는 각 시퀀스의 동일한 인덱스에 있는 요소들을 하나의 튜플로 묶어줍니다.


기본 사용법

zip() 함수의 기본 사용법은 다음과 같습니다.

list1 = [1, 2, 3]
list2 = ['a', 'b', 'c']

zipped = zip(list1, list2)
print(list(zipped))  # [(1, 'a'), (2, 'b'), (3, 'c')]

위 코드에서는 두 리스트 list1과 list2의 동일한 인덱스에 있는 요소들이 각각 짝을 이루어 튜플로 묶입니다.


여러 시퀀스 처리

zip() 함수는 두 개 이상의 시퀀스도 병렬로 처리할 수 있습니다.

list1 = [1, 2, 3]
list2 = ['a', 'b', 'c']
list3 = [True, False, True]

zipped = zip(list1, list2, list3)
print(list(zipped))  # [(1, 'a', True), (2, 'b', False), (3, 'c', True)]

이처럼 여러 시퀀스를 병렬로 묶어 각 시퀀스의 동일한 위치에 있는 값들을 튜플로 만들어줍니다.


길이가 다른 시퀀스 처리

만약 시퀀스들의 길이가 다를 경우, zip() 함수는 가장 짧은 시퀀스의 길이에 맞춰 나머지 요소들을 무시합니다.

list1 = [1, 2]
list2 = ['a', 'b', 'c']

zipped = zip(list1, list2)
print(list(zipped))  # [(1, 'a'), (2, 'b')]

list1의 길이가 짧기 때문에, list2의 나머지 요소는 무시되고, 길이가 짧은 시퀀스에 맞춰서 묶입니다.


응용: unzip (다시 풀기)

zip()으로 묶은 데이터를 다시 풀고 싶다면, * 연산자를 활용할 수 있습니다.

zipped = [(1, 'a'), (2, 'b'), (3, 'c')]
unzipped = zip(*zipped)
list1, list2 = list(unzipped)
print(list1)  # (1, 2, 3)
print(list2)  # ('a', 'b', 'c')

이 방식으로 zip()으로 묶은 데이터를 원래의 시퀀스로 다시 나눌 수 있습니다.