파이썬의 zip()
은 여러 이터러블(리스트, 튜플, range 등)을 같은 인덱스끼리 묶어 튜플들의 이터레이터를 만든다.
핵심 특징
- 게으른 이터레이터
- 결과를 한꺼번에 만들지 않고 필요할 때마다 생성함 → 메모리 절약.
- 가장 짧은 길이 기준으로 끝남.
- 개수 제한 없음
zip(a, b, c, ...)
처럼 여러 개를 동시에 묶을 수 있음.
- 언패킹으로 ‘되돌리기’
zip(*pairs)
로 다시 열 단위로 분리함.
- 길이 검사 옵션
zip(a, b, strict=True)
로 길이가 다르면ValueError
발생(PEP 618, Python 3.10+).
예제 모음
1) 기본 사용
nums = [1, 2, 3]
chars = ['a', 'b', 'c']
pairs = list(zip(nums, chars))
2) 병렬 반복
a = [10, 20, 30]
b = [1, 2, 3]
for x, y in zip(a, b):
print(x + y)
3) 두 리스트로 딕셔너리 만들기
keys = ['id', 'name', 'age']
values = [100, 'Alice', 31]
d = dict(zip(keys, values))
4) 2차원 리스트 전치(행/열 바꾸기)
matrix = [
[1, 2, 3],
[4, 5, 6],
]
transposed = [list(col) for col in zip(*matrix)]
5) 묶인 것 풀기(언집(zip)핑)
pairs = [(1, 'a'), (2, 'b'), (3, 'c')]
nums, chars = zip(*pairs)
6) 길이가 다를 때의 동작
a = [1, 2, 3]
b = ['x', 'y']
print(list(zip(a, b)))
7) 인덱스도 함께 필요할 때
nums = [1, 2, 3]
chars = ['a', 'b', 'c']
for i, (x, y) in enumerate(zip(nums, chars)):
print(i, x, y)
'CS Repository > 기초 강화학습' 카테고리의 다른 글
[강화학습] 마르코프 결정 과정(MDP) (0) | 2025.08.28 |
---|---|
[강화학습] 밴디트 문제 (1) | 2025.08.28 |
Define-by-Run과 Define-and-Run (0) | 2025.08.25 |
python - from A import B와 import A.B as b의 차이 (0) | 2025.08.25 |
python 애스터리스크(*) - 언패킹의 역할과 예제 (0) | 2025.08.25 |