안녕하세요, MoonLight입니다.
파이썬을 쓰다 보면 리스트나 튜플을 여러 개 동시에 반복해야 하는 상황이 자주 생깁니다.
예를 들어 학생 이름과 점수가 각각 리스트에 들어 있다고 해봅시다. 두 리스트를 같은 인덱스로 묶어서 처리해야 하는데, 단순한 for 루프만으로는 코드가 지저분해지기 쉽죠.
이럴 때 등장하는 파워풀한 도구가 바로 zip 함수입니다.
1. zip 함수
zip은 여러 iterable(리스트, 튜플, 문자열 등)을 인덱스별로 묶어주는 함수입니다.
즉, 병렬 반복(parallel iteration)을 간결하게 표현할 수 있게 해줍니다.
기본 예시
names = ["Alice", "Bob", "Charlie"]
scores = [85, 92, 78]
for name, score in zip(names, scores):
print(name, score)
결과
Alice 85
Bob 92
Charlie 78
zip은 이름과 점수를 같은 인덱스끼리 묶어서 (name, score) 형태의 튜플을 만들어줍니다.
2. 문법 구조
zip(iterable1, iterable2, ...)
- 여러 개의 iterable을 동시에 순회할 수 있도록 묶어줍니다.
- 리턴 값은 zip 객체(이터레이터)이며, 필요하면 list()로 변환해 확인할 수 있습니다.
2.1. 리스트 묶기
a = [1, 2, 3]
b = ['x', 'y', 'z']
print(list(zip(a, b)))
결과
[(1, 'x'), (2, 'y'), (3, 'z')]
2.2. 길이가 다르면?
가장 짧은 iterable에 맞춰서 묶습니다.
(itertools.zip_longest를 쓰면 긴 쪽 기준으로 묶을 수도 있어요.)
a = [1, 2, 3, 4]
b = ['x', 'y']
print(list(zip(a, b)))
결과
[(1, 'x'), (2, 'y')]
2.3. 언패킹 활용
연산자로 “압축 풀기”도 가능합니다.
pairs = [(1, 'x'), (2, 'y'), (3, 'z')]
a, b = zip(*pairs)
print(a)
print(b)
결과
(1, 2, 3)
('x', 'y', 'z')
2.4. 딕셔너리 만들기
keys = ["id", "name", "age"]
values = [101, "Alice", 25]
my_dict = dict(zip(keys, values))
print(my_dict)
결과
{'id': 101, 'name': 'Alice', 'age': 25}
2.5. 여러 리스트 동시 처리
kor = [90, 80, 70]
eng = [85, 75, 65]
math = [95, 88, 72]
for k, e, m in zip(kor, eng, math):
avg = (k + e + m) / 3
print(avg)
결과
90.0
81.0
69.0
3. 활용 포인트
· 병렬 루프 처리
여러 리스트를 동시에 순회할 때 코드가 깔끔해집니다.
· 데이터 매핑
두 리스트를 묶어서 딕셔너리로 변환할 때 자주 씁니다.
· 언패킹과 조합
데이터 변환 작업에서 묶고 풀기를 자유롭게 활용할 수 있습니다.
4. 장단점
4.1. 장점
- 간결성 : 여러 변수를 동시에 순회할 때 인덱스 관리가 필요 없습니다.
- 가독성 : 코드 의도가 명확해집니다. “리스트 두 개를 같이 순회한다”는 게 바로 보이죠.
- 다양한 조합 : dict 생성, 언패킹 등 다른 기능과 결합하면 더 강력해집니다.
4.2. 단점
- 길이가 다르면 자동으로 잘림 → 실수로 데이터 유실이 생길 수 있습니다.
- 한 번만 순회 가능 : zip 객체는 iterator라서 재사용하려면 다시 생성해야 합니다.
- 너무 많은 리스트를 묶으면 코드 이해가 어려워질 수 있습니다.
zip 함수는 간단하지만 실제 개발에서 자주 등장하는 상황을 세련되게 해결해줍니다.
이름과 값, 키와 데이터처럼 쌍(pair) 관계가 있는 데이터를 다룰 때 특히 빛을 발하죠.
앞으로 여러 리스트를 동시에 순회할 일이 생기면, range(len(...)) 대신 zip을 떠올려 보세요. 훨씬 파이써닉한 코드가 될 겁니다.
'Development Tip' 카테고리의 다른 글
Python enum 제대로 써보기: 상수 관리의 깔끔한 해법 (0) | 2025.09.14 |
---|---|
Python - List Comprehension (0) | 2025.08.31 |
HuggingFace의 Cache Folder 변경하기 (2) | 2025.07.20 |
Poetry vs Anaconda (2) | 2025.07.12 |
"보일러플레이트 Code"란? (0) | 2025.04.05 |