파이썬에서 관련 객체로 구성된 리스트를 많이 사용한다. 서로 다른 리스트를 병렬로 처리하기 위해서 파이썬에서는 zip이라는 내장함수를 제공한다. zip을 활용했을 때 리스트 컴프리헨션 및 enumerate를 사용했을 경우보다 더 간편하다는 점을 확인해보자.

이번 포스팅은 다음의 링크를 참조하였다.

리스트 컴프리헨션을 이용한 예제

names = ["Cecilia", "Lise", "Marie"]
letters = [len(n) for n in names]

longest_name = None
max_letters = 0

for i in range(len(names)):
    count = letters[i]
    if count > max_letters:
        longest_name = names[i]
        max_letters = count

print(longest_name)

>>>
Cecilia

enumerate를 이용한 예제

names = ["Cecilia", "Lise", "Marie"]
letters = [len(n) for n in names]

for i, name in enumerate(names):
    count = letters[i]
    if count > max_letters:
        longest_name = name
        max_letters = count

zip을 이용한 예제

names = ["Cecilia", "Lise", "Marie"]
letters = [len(n) for n in names]

for name, count in zip(names, letters):
    if count > max_letters:
        longest_name = name
        max_letters = count

zip의 문제점

names = ["Cecilia", "Lise", "Marie", "Rosalind"]    # names와 letters의 길이가 다른 상황
letters = [7, 4, 5]

for name, count in zip(names, letters):
    print(name)

>>>
Cecilia                                             # Rosalind의 결과는 출력되지 않음
Lise
Marie
from itertools import zip_longest

x = [1, 2, 3]
y = [4, 5, 6, 7]

zipped = zip_longest(x, y)
print(list(zipped))

zipped = zip_longest(x, y, fillvalue=0)     # fillvalue 인자에 값을 지정
print(list(zipped))

>>>
[(1, 4), (2, 5), (3, 6), (None, 7)]
[(1, 4), (2, 5), (3, 6), (0, 7)]