Python zip
과 zip_longest
로 두 리스트 병합하기: 짝 맞추기 대작전
데이터를 다루다 보면 두 리스트를 짝을 맞춰 병합해야 할 때가 많습니다. Python의 zip
과 zip_longest
는 이러한 작업을 간단하게 도와주는 유용한 함수입니다. zip
은 두 리스트의 길이가 같을 때 주로 사용되며, zip_longest
는 길이가 다른 리스트도 끝까지 짝을 맞출 수 있게 해줍니다.
이번 글에서는 zip
과 zip_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_longest
는 English 과목에 기본값을 추가하여 모든 과목을 포함한 성적 목록을 반환합니다.fillvalue
로 기본값을 지정해, 누락된 데이터 처리가 간단해집니다.
zip
과 zip_longest
의 차이점 정리
기능 | zip | zip_longest |
---|---|---|
기본 동작 | 가장 짧은 리스트를 기준으로 병합 | 가장 긴 리스트를 기준으로 병합 |
누락된 요소 처리 | 누락된 요소는 자동으로 제외 | fillvalue 로 지정한 값으로 채움 |
용도 | 길이가 같은 리스트 병합 시 유용 | 길이가 다른 리스트 병합 시 유용 |
사용 예시
zip
: 데이터의 길이가 일치하는 경우, 짝을 맞춰 데이터 정리를 할 때 사용zip_longest
: 누락된 데이터를 기본값으로 채워야 할 때 유용함
실전 예제 3: 다수의 리스트 병합으로 데이터 정리하기
여러 개의 리스트가 있을 때도 zip
과 zip_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
는 누락된 요소를 기본값으로 채웁니다.- 여러 리스트를 한 번에 병합할 때도
zip
과zip_longest
로 데이터를 손쉽게 정리할 수 있습니다.
요약: zip
과 zip_longest
로 효율적인 데이터 정리
Python의 zip
과 zip_longest
는 리스트를 짝지어 병합하고 데이터를 정리하는 데 매우 유용합니다. 두 리스트의 길이가 맞지 않을 때도 zip_longest
를 사용해 기본값을 추가하면서 처리할 수 있어, 데이터 누락이 발생하지 않도록 안전하게 코딩할 수 있습니다.
다음과 같은 경우 zip
과 zip_longest
를 사용해보세요:
- 길이가 동일한 리스트 병합:
zip
을 통해 간단히 병합 - 길이가 다른 리스트 병합:
zip_longest
를 통해 누락된 부분에 기본값을 추가
'개발 > Python 스터디' 카테고리의 다른 글
[Python] 리스트 효율적으로 나누기: `chunks` 함수 만들기 가이드 (0) | 2024.11.18 |
---|---|
[Python] `defaultdict`로 편리한 딕셔너리 생성: 기본값으로 딕셔너리 쉽게 관리하기 (0) | 2024.11.12 |
[Python] `enumerate`로 간편하게 인덱스 추적하기: 인덱스와 값 모두 쉽게 관리하기 (0) | 2024.11.10 |
[Python] 리스트 컴프리헨션과 메모리 절약: 더 빠르고 효율적인 코드 작성법 (1) | 2024.11.09 |
[Python] `yield` 완벽 가이드: 효율적인 데이터 처리와 제너레이터 사용법 (0) | 2024.11.08 |