Python zipzip_longest로 두 리스트 병합하기: 짝 맞추기 대작전

데이터를 다루다 보면 두 리스트를 짝을 맞춰 병합해야 할 때가 많습니다. Python의 zipzip_longest는 이러한 작업을 간단하게 도와주는 유용한 함수입니다. zip은 두 리스트의 길이가 같을 때 주로 사용되며, zip_longest길이가 다른 리스트도 끝까지 짝을 맞출 수 있게 해줍니다.

이번 글에서는 zipzip_longest의 사용법과 실제 코딩에서 유용하게 사용할 수 있는 예제를 통해 이 함수들의 차이점을 이해해보겠습니다.


zip 기본 사용법: 두 리스트 병합하기

zip 함수는 두 개 이상의 리스트를 받아 각각의 요소를 짝지어 튜플로 묶은 새로운 리스트를 만듭니다. 두 리스트의 길이가 다를 경우, 짧은 리스트에 맞춰서 요소를 묶습니다.

list1 = [1, 2, 3]
list2 = ['a', 'b', 'c']

result = list(zip(list1, list2))
print(result)

결과

[(1, 'a'), (2, 'b'), (3, 'c')]

설명

  • zip(list1, list2)는 두 리스트의 요소를 순서대로 짝지어 [(1, 'a'), (2, 'b'), (3, 'c')]를 반환합니다.
  • zip가장 짧은 리스트를 기준으로 병합되므로, 짝이 맞지 않는 요소는 자동으로 제외됩니다.

실전 예제 1: 학생 성적 리스트 병합하기

두 리스트를 zip으로 병합하여 학생 이름과 성적을 쉽게 매칭할 수 있습니다. 이 방법을 통해 복잡한 데이터 정렬 없이 간단히 학생별 성적을 관리할 수 있습니다.

students = ["Alice", "Bob", "Charlie"]
scores = [85, 92, 78]

student_scores = dict(zip(students, scores))
print(student_scores)

결과

{'Alice': 85, 'Bob': 92, 'Charlie': 78}

설명

  • dict(zip(students, scores))를 통해 이름과 성적을 딕셔너리 형태로 병합할 수 있습니다.
  • zip을 사용하면 두 리스트를 한 번에 매칭하여 간단히 데이터를 정리할 수 있습니다.

zip_longest로 길이가 다른 리스트 병합하기

때로는 두 리스트의 길이가 맞지 않는 경우가 있습니다. 이때는 itertools 모듈의 zip_longest를 사용해 짧은 리스트의 부족한 부분을 특정 값으로 채워줍니다.

from itertools import zip_longest

list1 = [1, 2, 3]
list2 = ['a', 'b']

result = list(zip_longest(list1, list2, fillvalue='N/A'))
print(result)

결과

[(1, 'a'), (2, 'b'), (3, 'N/A')]

설명

  • zip_longest(list1, list2, fillvalue='N/A')는 짧은 리스트의 빈 자리를 'N/A'로 채우며 병합합니다.
  • 이 함수는 길이가 맞지 않는 리스트를 다룰 때 매우 유용합니다. 예를 들어, 일부 데이터가 없는 경우 기본값을 추가하여 처리할 수 있습니다.

실전 예제 2: 과목별 성적 정리하기

학생들이 수강한 과목이 달라서 리스트의 길이가 맞지 않을 때 zip_longest를 사용하면 쉽게 해결할 수 있습니다.

subjects = ["Math", "Science", "English"]
scores = [95, 88]  # English 성적이 없을 경우

subject_scores = dict(zip_longest(subjects, scores, fillvalue='Not Available'))
print(subject_scores)

결과

{'Math': 95, 'Science': 88, 'English': 'Not Available'}

설명

  • zip_longestEnglish 과목에 기본값을 추가하여 모든 과목을 포함한 성적 목록을 반환합니다.
  • fillvalue로 기본값을 지정해, 누락된 데이터 처리가 간단해집니다.

zipzip_longest의 차이점 정리

기능 zip zip_longest
기본 동작 가장 짧은 리스트를 기준으로 병합 가장 긴 리스트를 기준으로 병합
누락된 요소 처리 누락된 요소는 자동으로 제외 fillvalue로 지정한 값으로 채움
용도 길이가 같은 리스트 병합 시 유용 길이가 다른 리스트 병합 시 유용

사용 예시

  • zip: 데이터의 길이가 일치하는 경우, 짝을 맞춰 데이터 정리를 할 때 사용
  • zip_longest: 누락된 데이터를 기본값으로 채워야 할 때 유용함

실전 예제 3: 다수의 리스트 병합으로 데이터 정리하기

여러 개의 리스트가 있을 때도 zipzip_longest를 활용하면 데이터 정리를 쉽게 할 수 있습니다.

names = ["Alice", "Bob"]
scores = [85, 90]
grades = ["B", "A"]

# zip 사용
result_zip = list(zip(names, scores, grades))
print("Using zip:", result_zip)

# zip_longest 사용
result_zip_longest = list(zip_longest(names, scores, grades, fillvalue="N/A"))
print("Using zip_longest:", result_zip_longest)

결과

Using zip: [('Alice', 85, 'B'), ('Bob', 90, 'A')]
Using zip_longest: [('Alice', 85, 'B'), ('Bob', 90, 'A'), ('N/A', 'N/A', 'N/A')]

설명

  • zip은 길이가 맞는 요소만 병합하고, zip_longest누락된 요소를 기본값으로 채웁니다.
  • 여러 리스트를 한 번에 병합할 때도 zipzip_longest로 데이터를 손쉽게 정리할 수 있습니다.

요약: zipzip_longest로 효율적인 데이터 정리

Python의 zipzip_longest리스트를 짝지어 병합하고 데이터를 정리하는 데 매우 유용합니다. 두 리스트의 길이가 맞지 않을 때도 zip_longest를 사용해 기본값을 추가하면서 처리할 수 있어, 데이터 누락이 발생하지 않도록 안전하게 코딩할 수 있습니다.

다음과 같은 경우 zipzip_longest를 사용해보세요:

  1. 길이가 동일한 리스트 병합: zip을 통해 간단히 병합
  2. 길이가 다른 리스트 병합: zip_longest를 통해 누락된 부분에 기본값을 추가

+ Recent posts