
from Scratch
41
2.24
zip과 인자 언패킹
가끔씩 두 개 이상의 리스트를 서로 묶어주고 싶을 때가 있다.
zip
은 여러 개의
리스트를 서로 상응하는 항목의 튜플로 구성된 리스트로 변환해 준다.
list1 = ['a', 'b', 'c']
list2 = [1, 2, 3]
#
실제
반복문이
시작되기
전까지는
묶어주지
않는다
.
[pair for pair in zip(list1, list2)] # [('a', 1), ('b', 2), ('c', 3)]
주어진 리스트의 길이가 서로 다른 경우
zip
은 첫 번째 리스트가 끝나면 멈춘다.
묶인 리스트는 다음과 같은 트릭을 사용해 다시 풀어줄 수도 있다.
pairs = [('a', 1), ('b', 2), ('c', 3)]
letters, numbers = zip(*pairs)
이 트릭에서 사용한 별표(
*
)는 원래 인자 언패킹(
argument
unpacking
)을 할 때
사용되는 문법으로, 이를 사용하면
pairs
안의 항목들을
zip
함수에 개별적인 인
자로 전달해 준다. 결국 다음과 같은 코드와 동일하다.
letters, numbers = zip(('a', 1), ('b', 2), ('c', 3))
이런 방식의 인자 해체는 모든 함수에 적용할 수 있다.
def add(a, b): return ...