코딩테스트/Python 개념

[Python] 내장 함수 zip()

박소민 2022. 2. 5. 21:12
zip() 함수
  : 두 그룹의 데이터를 엮어주는 파이썬 내장 함수

 

  • zip(A,B,C)
  • 여러 개의 순회 가능한(iterable) 객체를 인자로 받음
  • 각 객체가 담고 있는 데이터를 하나씩 차례로 짝지어 튜플의 형태 반환
numbers=[1,2,3]
letters=['A','B','C']
for pair in zip(numbers,letters):
  print(pair)

- 결과: 튜플로 반환

(1,'A')
(2,'B')
(3,'C')

 

  • 병렬 처리

- 루프를 한 번만 돌면서 여러 그룹 데이터를 처리할 수 있음

가변 인자를 받기 때문에 2개 이상의 인자 넘겨서 병렬 처리 가능

- 각 원소를 3개의 변수에 할당하려면 for문에서 튜플을 인자풀기(unpacking)해 주면 됨

for number, upper, lower in zip('12345',"ABCDE","abcde"):
  print(number, upper, lower)

- 결과

1 A a
2 B b
3 C c
4 D d
5 E e

 

zip() 해제 

- zip(*pairs) 형태

- zip() 함수로 엮어 놓은 데이터를 다시 해제

- zip한 값을 list로 묶은 후 해제 하는 것과 zip한 값 그대로 해제 하는거랑 똑같은 결과

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

print(pairs)
#결과
[(1,'A'),(2,'B'),(3,'C')]

#unzip
numbers, letters=zip(*pairs)
print(numbers)
print(letters)
#결과
(1,2,3)
('A','B','C')

 

사전 변환
  • 딕셔너리 자료형으로 만들기
  • dict() 함수에 (key, value) 형태의 튜플을 넣으면 사전이 생성되는 원리 이용
  • 각각의 객체에서 하나씩 짝지어진 값이 각각 key, value가 됨
  • zip() 함수 적용 후 dict() 함수 적용
numbers=[1,2,3]
letters=['A','B','C']
dic= dict(zip(numbers,letters))
print(dic)

#결과
{1:'A', 2:'B', 3:'C'}
dic=dict(zip(["year","month","day"], [2001,1,31]))
print(dic)

#결과
{'year': 2001, 'month':1, 'day':31}

 

주의할 점
  • zip() 함수로 넘기는 인자의 길이가 다를 때
  • 가장 짧은 인자까지만 엮이고 나머지는 버려짐
numbers=["1","2","3"]
letters=["A"]
zip_list=list(zip(numbers,letters))
print(zip_list)

#결과
[('1','A')]

 

 

참고) daleseo.com