00 개요
- iterable 객체를 다루는 파이썬 내장 함수에 대한 정리
01 .zip() 란
1. 정의
- zip() 함수는 입력된 여러 개의 iterable을 동시에 순회하며, 각 iterable의 동일한 인덱스 위치에 있는 요소들을 하나의 튜플로 묶어 반환하는 함수
- 인자로 입력된 iterables들의 길이가 다를 경우, 가장 짧은 iterable을 기준으로 동작하며 남은 요소들은 무시됨
2. 문법
zip(*iterables)
- 인자
- iterables: 반복 가능한 객체들(list, tuple, str, etc.). 2개 이상의 iterable을 인자로 받음
- 반환값
- 각 iterable의 요소를 묶은 tuple들의 iterator
3. 예시
1) 기본 사용 예시
- numbers 리스트와 letters 리스트가 각각의 인덱스에 맞춰 튜플로 묶임
# 2개의 list를 zip으로 묶기
numbers = [1, 2, 3]
letters = ['a', 'b', 'c']
zipped = zip(numbers, letters)
print(list(zipped)) # [(1, 'a'), (2, 'b'), (3, 'c')]
import string
letters = string.ascii_uppercase + string.ascii_lowercase
numbers = range(1, len(letters) + 1)
zipped = zip(numbers, letters)
print(zipped) # <zip object at 0x000001D30D7A9500>
print(list(zipped)) # [(1, 'A'), (2, 'B'), (3, 'C'), (4, 'D'), (5, 'E'), (6, 'F'), (7, 'G'), (8, 'H'), (9, 'I'), (10, 'J'), (11, 'K'), (12, 'L'), (13, 'M'), (14, 'N'), (15, 'O'), (16, 'P'), (17, 'Q'), (18, 'R'), (19, 'S'), (20, 'T'), (21, 'U'), (22, 'V'), (23, 'W'), (24, 'X'), (25, 'Y'), (26, 'Z'), (27, 'a'), (28, 'b'), (29, 'c'), (30, 'd'), (31, 'e'), (32, 'f'), (33, 'g'), (34, 'h'), (35, 'i'), (36, 'j'), (37, 'k'), (38, 'l'), (39, 'm'), (40, 'n'), (41, 'o'), (42, 'p'), (43, 'q'), (44, 'r'), (45, 's'), (46, 't'), (47, 'u'), (48, 'v'), (49, 'w'), (50, 'x'), (51, 'y'), (52, 'z')]
2) 여러 iterable을 zip으로 묶기
- 세 개의 iterable도 동일하게 인덱스에 맞춰 튜플로 묶임
# 3개의 리스트를 zip으로 묶기
numbers = [1, 2, 3]
letters = ['a', 'b', 'c']
symbols = ['$', '%', '&']
zipped = zip(numbers, letters, symbols)
print(list(zipped)) # [(1, 'a', '$'), (2, 'b', '%'), (3, 'c', '&')]
3) 다른 길이의 iterable을 zip으로 묶기
- 길이가 다를 경우, 가장 짧은 iterable을 기준으로 동작하며, 남은 요소들은 무시됨
zipped = zip([1, 2, 3], 'abcde')
for a in zipped:
print(a)
print(zipped)
# 출력값
# (1, 'a')
# <zip object at 0x000001D30D808500>
# (2, 'b')
# <zip object at 0x000001D30D808500>
# (3, 'c')
# <zip object at 0x000001D30D808500>
4. 사용 사례
1) 두 리스트를 동시에 순회하기
- 2개 이상의 리스트를 동시에 순회할 때 zip() 사용 가능
names = ['Pearl', 'Jake', 'Elisa']
fav_colors = ['green', 'purple', 'red']
for name, color in zip(names, fav_colors):
print(f'{name}\'s favorite color is {color}.')
# 출력
# Pearl's favorite color is green.
# Jake's favorite color is purple.
# Elisa's favorite color is red.
2) 딕셔너리 생성하기
- 리스트 또는 튜플을 활용해 딕셔너리 생성 가능
data = ['Pearl', 20, 'blue']
category = ['name', 'age', 'color']
info = dict(zip(category, data))
print(info) # {'name': 'Pearl', 'age': 20, 'color': 'blue'}
3) 두 리스트의 요소 교환하기
- 리스트의 요소를 서로 교환하는 작업에도 zip()을 사용 가능
list1 = [1, 2, 3]
list2 = [4, 5, 6]
# 두 리스트의 요소를 서로 교환
list1, list2 = list(zip(list2, list1))
print(list1) # [4, 5, 6]
print(list2) # [1, 2, 3]
4) 언집 (zip 반대 과정) 하기
- zip()을 사용해 묶인 요소를 다시 풀어낼 때 * 연산자 사용
zipped = [(1, 'a'), (2, 'b'), (3, 'c')]
numbers, letters = zip(*zipped)
print(numbers) # (1, 2, 3)
print(letters) # ('a', 'b', 'c')
결론
- zip() 함수는 여러 iterable을 동시에 처리할 때 매우 유용한 도구
- 리스트, 튜플, 문자열 등 다양한 데이터 타입에서 활용 가능
- 특히 데이터를 병렬로 처리하거나 여러 iterable을 묶을 때 유용
- zip()을 사용하면 코드의 가독성을 높이고, 반복 작업을 간편하게 처리 가능
- zip() 함수의 활용 범위는 매우 넓으며, 다양한 문제 해결에 적용 가능
- 파이썬을 다루는 개발자라면 이 함수의 사용법을 확실히 이해하고 활용하는 것이 매우 유용할 것
'Python > 기본문법' 카테고리의 다른 글
리스트 내 중복값 제거하기 (Python) (0) | 2024.11.25 |
---|---|
메소드 오버라이드 (Method Override)란 (메소드 재정의) (0) | 2024.09.30 |
Decimal (파이썬 데이터 타입) (0) | 2024.09.02 |
f.tell() (파이썬 파일 처리 함수) (0) | 2024.08.09 |
f.seek() (파이썬 파일 처리 함수) (0) | 2024.08.09 |