파이썬의 기본 함수인 zip과 itertools 모듈의 zip_longest를 비교하겠습니다.

1. zip(*iterables, strict=False)

iterable들의 각 순서에 대응되는 원소를 tuple로 묶어 반복합니다.

strict가 True일때 각 iterable들의 길이가 같지 않으면 ValueError가 발생합니다.

기본적으로는 strict가 False인데, 이때는 iterable들 중 길이가 가장 작은 순서까지만 반복합니다.

l1 = [1, 2, 3]
l2 = 'abcde'
l3 = ['apple', 'orange', 'melon', 'lemon']

for tup in zip(l1, l2, l3):
	print(tup)
# 길이가 가장 짧은 l1에 맞춰 반복
# (1, 'a', 'apple')
# (2, 'b', 'orange')
# (3, 'c', 'melon')

2. zip_longest(*iterables, fillvalue=None)

zip_longest는 기본적으로 zip과 같지만, iterable들 중 길이가 가장 긴 iterable을 기준으로 반복합니다.

그 보다 길이가 짧은 iterable들은 fillvalue값으로 채워집니다.

from itertools import zip_longest

l1 = [1, 2, 3]
l2 = 'abcde'
l3 = ['apple', 'orange', 'melon', 'lemon']

for tup in zip_longest(l1, l2, l3, fillvalue='NO'):
	print(tup)
# 길이가 가장 긴 l2를 기준으로 반복, 빈 자리는 fillvalue로 채운다
# (1, 'a', 'apple')
# (2, 'b', 'orange')
# (3, 'c', 'melon')
# ('NO', 'd', 'lemon')
# ('NO', 'e', 'NO')

+ Recent posts