Python에서 zip() 함수를 사용하는 방법(반복 가능 항목 결합)

Python의 zip() 함수를 사용하여 여러 반복 가능 항목을 병렬로 결합하는 방법을 알아보세요. 사전 생성을 마스터하고 논리 압축을 풀고 길이 불일치를 처리합니다.

Editor에서 이 솔루션을 사용해 보세요.

개요

데이터 세트를 반복할 때 여러 관련 목록을 병렬로 처리해야 하는 경우가 많습니다. 예를 들어 사용자 이름 목록을 사용자 ID 목록과 페어링하거나 X 및 Y 값의 좌표를 일치시킵니다. 중첩 루프나 목록 인덱싱 카운터를 사용하여 항목에 액세스하는 대신 Python은 우아한 `zip()` 기능을 제공합니다.

`zip(*iterables)` 함수는 여러 반복 가능 항목을 인수로 취하고 이를 집계하여 i 번째 튜플이 각 입력 반복 가능 항목의 i 번째 요소를 포함하는 튜플의 반복자를 반환합니다. 이를 통해 단일 `for` 루프를 사용하여 두 개 이상의 컬렉션을 동시에 쉽게 반복할 수 있습니다.

기본적으로 'zip()'은 가장 짧은 입력 반복 가능 항목이 소진되면 결합을 중지합니다. 더 긴 반복 가능 항목의 나머지 요소는 삭제됩니다. 가장 긴 반복 가능 항목이 소진될 때까지 요소를 쌍으로 만들고 누락된 값을 자리 표시자로 채우려는 경우 Python은 표준 라이브러리의 `itertools` 모듈에 `zip_longest()`를 제공합니다.

코드 및 실행 출력

이 스크립트는 병렬 목록 반복, zip을 사용하여 사전 생성, zip_longest를 사용하여 불일치 처리를 보여줍니다.

from itertools import zip_longest

names = ["Alice", "Bob", "Charlie"]
scores = [85, 90, 95]

# 1. Basic Zipping in a loop
print("--- Parallel Iteration ---")
for name, score in zip(names, scores):
    print(f"{name} scored {score}")

# 2. Creating a dictionary from two lists
user_dict = dict(zip(names, scores))
print("\nCreated Dictionary:", user_dict)

# 3. Handling unequal list lengths with zip_longest
extra_names = ["Alice", "Bob", "Charlie", "David"]
short_scores = [85, 90]

# Standard zip truncates
print("\nStandard zip output:", list(zip(extra_names, short_scores)))

# zip_longest fills missing values
zipped_long = list(zip_longest(extra_names, short_scores, fillvalue="N/A"))
print("zip_longest output:", zipped_long)
터미널 출력
--- Parallel Iteration ---
Alice scored 85
Bob scored 90
Charlie scored 95

Created Dictionary: {'Alice': 85, 'Bob': 90, 'Charlie': 95}

Standard zip output: [('Alice', 85), ('Bob', 90)]
zip_longest output: [('Alice', 85), ('Bob', 90), ('Charlie', 'N/A'), ('David', 'N/A')]

단계별 구현

  • zip() 함수에 결합하려는 여러 목록이나 반복 가능 항목을 전달합니다.
  • 깔끔한 병렬 반복을 위해 for 루프 문에서 생성된 튜플을 압축 해제합니다.
  • 매핑을 위해 dict(zip(keys_list, value_list)) 를 사용하여 zip 객체를 사전으로 변환합니다.
  • tail 값을 잃지 않고 길이가 다른 목록을 결합하려면 itertools.zip_longest를 가져옵니다.

자주 묻는 질문

압축된 튜플 시퀀스를 어떻게 "압축 해제"합니까?

압축 풀기 연산자 *: list(zip(*zipped_tuples))를 사용하여 시퀀스를 다시 별도의 목록으로 압축을 풀 수 있습니다.

zip()이 메모리의 요소를 복제합니까?

아니요, zip()은 요청 시 요소를 생성하는 반복자를 반환하므로 메모리 효율성이 매우 높습니다.

관련 주제

권장 Python 리소스

관련 대화형 튜토리얼, 치트 시트, 코드 비교를 통해 지식을 확장하세요.