더북(TheBook)

zip은 자신이 감싼 이터레이터 원소를 하나씩 소비한다. 따라서 메모리를 다 소모해서 프로그램이 중단되는 위험 없이 아주 긴 입력도 처리할 수 있다.

하지만 입력 이터레이터의 길이가 서로 다를 때는 zip이 어떻게 동작하는지에 주의해야 한다. 예를 들어 names에 다른 원소를 추가하고 count를 갱신하는 것은 잊어버렸다고 하자. 두 입력 리스트에 대해 zip을 실행하면 예상과 다른 결과가 나온다.

names.append('Rosalind')
for name, count in zip(names, counts):
    print(name)

>>>
Cecilia
남궁민수
毛泽东

새로 추가한 원소인 'Rosalind'에 대한 출력은 없다. 왜 없을까? zip이 그렇게 동작하기 때문이다. zip은 자신이 감싼 이터레이터 중 어느 하나가 끝날 때까지 튜플을 내놓는다. 따라서 출력은 가장 짧은 입력의 길이와 같다. 입력 이터레이터의 길이가 모두 같다면 이 방식이 잘 작동한다. 리스트 컴프리헨션으로 리스트를 파생시킨 경우 각 리스트의 길이가 같은 경우가 많다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.