Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬 zip() 함수 완벽 가이드: 여러 이터러블을 묶는 방법

zip() 함수는 여러 개의 이터레이터(반복 가능한 객체)를 하나로 묶어주는 파이썬의 내장 함수입니다. 각 이터러블에서 같은 위치에 있는 요소들을 짝지어 튜플 형태로 반환하며, 데이터 병렬 처리에 매우 유용하게 활용됩니다.

zip() 함수 문서 확인하기

help() 메서드를 사용하면 zip() 함수의 공식 문서를 직접 확인할 수 있습니다. 아래 코드를 실행해 보세요.

예제

help(zip)

위 프로그램을 실행하면 다음과 같은 결과가 출력됩니다.

출력 결과

Help on class zip in module builtins:
class zip(object)
    | zip(iter1 [,iter2 [...]]) --> zip object
    |
    | Return a zip object whose .__next__() method returns a tuple where
    | the i-th element comes from the i-th iterable argument. The .__next__()
    | method continues until the shortest iterable in the argument sequence
    | is exhausted and then it raises StopIteration.

문서 내용을 살펴보면, zip 객체의 __next__() 메서드는 각 인자로 전달된 이터러블에서 i번째 요소를 가져와 튜플로 묶어 반환합니다. 그리고 인자 중 가장 짧은 이터러블이 소진되면 반복을 멈추고 StopIteration 예외를 발생시킨다는 점이 핵심입니다.

zip() 함수 기본 사용법

간단한 예제를 통해 zip() 함수가 어떻게 동작하는지 알아보겠습니다. 두 개의 리스트를 zip()으로 묶으면, 각 리스트에서 대응되는 요소들이 튜플 쌍으로 생성됩니다.

예제

## 두 개의 리스트 초기화
names = ['Harry', 'Emma', 'John']
ages = [19, 20, 18]
## 두 리스트를 zip으로 묶기
## zip()은 두 리스트에서 대응되는 요소끼리 묶인 튜플 쌍을 반환합니다.
print(list(zip(names, ages)))

위 프로그램을 실행하면 다음과 같은 결과를 얻습니다.

출력 결과

[('Harry', 19), ('Emma', 20), ('John', 18)]

zip() 함수는 이터레이터를 반환하기 때문에, 결과를 리스트 형태로 보고 싶다면 위 예제처럼 list()로 감싸주면 됩니다.

압축 해제(Unzipping)하기

zip()으로 묶은 요소들은 다시 원래 상태로 분리할 수도 있습니다. 앞에 별표(*)를 붙인 언패킹 연산자를 함께 전달하면 되는데, 이를 '언집(unzip)'이라고 부릅니다.

예제

## 두 개의 리스트 초기화
names = ['Harry', 'Emma', 'John']
ages = [19, 20, 18]
## 두 리스트를 zip으로 묶기
zipped = list(zip(names, ages))
## 압축 해제 (unzipping)
new_names, new_ages = zip(*zipped)
## 새로운 이름과 나이 출력
print(new_names)
print(new_ages)

위 프로그램을 실행하면 다음과 같은 결과가 출력됩니다.

출력 결과

('Harry', 'Emma', 'John')
(19, 20, 18)

*zipped처럼 애스터리스크를 붙여 전달하면 리스트 안의 각 튜플이 개별적인 인자로 풀려서 zip() 함수에 들어가고, 다시 원래의 이름 목록과 나이 목록으로 분리되는 것을 확인할 수 있습니다.

zip() 함수의 일반적인 활용

zip() 함수는 서로 다른 이터레이터에서 대응되는 여러 요소를 한 번에 처리할 때 특히 유용합니다. for 루프와 함께 사용하면 코드를 깔끔하고 가독성 있게 작성할 수 있습니다.

예제

## 두 개의 리스트 초기화
names = ['Harry', 'Emma', 'John']
ages = [19, 20, 18]
## zip()을 사용해 이름과 나이를 한 번에 출력
for name, age in zip(names, ages):
    print(f"{name}'s age is {age}")

위 프로그램을 실행하면 다음과 같은 결과를 얻습니다.

출력 결과

Harry's age is 19
Emma's age is 20
John's age is 18

마무리

파이썬의 zip() 함수는 여러 이터러블을 병렬로 처리하는 강력하고 간결한 도구입니다. 인덱스를 직접 관리하지 않고도 여러 시퀀스의 데이터를 동시에 순회할 수 있어 코드의 가독성과 안정성이 크게 향상됩니다. 또한 별표(*) 연산자와 함께 사용하면 묶었던 데이터를 손쉽게 다시 분리할 수 있습니다. 실무에서 두 개 이상의 리스트나 튜플, 딕셔너리 등을 함께 다룰 때 zip() 함수를 적극적으로 활용해 보세요.