CS Repository/기초 강화학습

Python - zip의 역할과 예제

조금씩 차근차근 2025. 8. 24. 20:15

파이썬의 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)