프로그래밍 공부/python

python 내장함수 zip()

sh1256 2023. 2. 9. 15:11
728x90

https://www.daleseo.com/python-zip/

 

파이썬의 zip() 내장 함수로 데이터 엮기

Engineering Blog by Dale Seo

www.daleseo.com

zip의 기본 문법

zip() 함수는 여러 개의 순회 가능한(iterable) 객체를 인자로 받고, 각 객체가 담고 있는 원소를 튜플의 형태로 차례로 접근할 수 있는 반복자(iterator)를 반환한다.

 

말만으로 이해하려니 힘들수도 있다. 아래 예시를 보자

num=[1,2,3]
ch=['a', 'b', 'c']
for pair in zip(num, ch):
    print(pair)
# (1, 'a')
# (2, 'b')
# (3, 'c')
num=[1,2,3]
ch=['a', 'b', 'c']
pairs=[pair for pair in zip(num, ch)]
print(pairs) #[(1, 'a'), (2, 'b'), (3, 'c')]

 

3개 이상의 배열을 zip으로 묶는 것도 가능합니다. 각 a, b, c에 있는 원소들을 위치에 맞게 더하는 프로그램을 작성해보았습니다.

a=[1,2,3]
b=[1,2,3]
c=[1,2,3]
for pair in zip(a, b, c):
    sum=pair[0]+pair[1]+pair[2]
    print(sum)
# 3
# 6
# 9

다음은 3개의 배열을 각 차례로 출력해봅시다.

for num, upper, lower in zip('12345', 'ABCDE', 'abcde'):
    print(num, upper, lower)
# 1 A a
# 2 B b
# 3 C c
# 4 D d
# 5 E e

 

unzip

zip으로 묶어놓은 객체를 원래대로 푸는 것도 가능합니다. 

numbers = (1, 2, 3)
letters = ("A", "B", "C")
pairs = list(zip(numbers, letters))
print(pairs)
#[(1, 'A'), (2, 'B'), (3, 'C')]

num2, let2=zip(*pairs)
print(num2, let2)
#(1, 2, 3) ('A', 'B', 'C')

zip으로 dictionary만들기

zip객체를 dict()으로 감싸면 딕셔너리 객체를 얻을 수 있습니다. 

di=dict(zip(["year", "month", "date"], [2001, 1, 31]))
print(di)
#{'year': 2001, 'month': 1, 'date': 31}

 

zip의 인자들이 갯수가 다를 땐?

가장 짧은 데이터를 기준으로 zip이 만들어지고 다른 데이터들을 버려집니다.

numbers = ["1", "2", "3"]
letters = ["A"]
li=list(zip(numbers, letters))
print(li)
#[('1', 'A')]