71. 파이썬 itertools.zip_longest 표준 라이브러리

  • 네이버 블로그 공유하기
  • 카카오톡 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 트위터 공유하기

지난 포스팅에서 파이썬 표준 라이브러리 random 에 대해서 알아봤습니다.
이번 포스팅에서는 파이썬 표준 라이브러리 중 itertools.zip_longest 에 대해 공부해 보도록 하겠습니다.

파이썬 표준 라이브러리

itertools.zip_longest

itertools.zip_longest 함수는 같은 개수의 자료형을 묶는 파이썬 내장 함수인 zip() 과 똑같은 동작을 합니다.
그러나 itertools.zip_longest() 함수는 전달한 반복 가능한 객체의 길이가 다르면 긴 것을 기준으로 빠진 값은 fillvalue 에 설정한 값으로 채울 수가 있다는 점이 다릅니다.
itertools.zip_longest 함수의 사용되는 형식은 itertools.zip_longest(*iterable, fillvalue=None) 의 형태로 사용이 됩니다.

예를 들어 어린이집에 있는 어린이들 5명에게 간식을 나누어 주는 파이썬 코드를 작성해 보겠습니다.

Python
# snacks1.py
children = ['박영재', '한관민', '황영철', '이승민', '이보라']
snacks = ['젤리', '초콜렛', '사탕']

result = zip(children, snacks)
print(list(result))

위 코드를 실행하면 아래의 결과가 나옵니다.

Python
(py_study_31010) D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST>python snacks1.py
[('박영재', '젤리'), ('한관민', '초콜렛'), ('황영철', '사탕')]

(py_study_31010) D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST>

위 결과를 보면 간식의 개수가 어린이집의 어린이들보다 수가 적습니다. 이처럼 children 과 snacks 의 개수가 다르므로 더 적은 snacks 의 개수 만큼만 zip() 으로 묶어 버리게 됩니다.
위 코드의 예처럼 children 이 snacks 보다 많아도 부족한 snacks 는 다른 과자인 ‘치토스’ 로 채워 간식을 나누어 주는 코드를 작성하면 어떻게 될까요?

Python
[('박영재', '젤리'), ('한관민', '초콜렛'), ('황영철', '사탕'), ('이승민', '치토스'), ('이보라', '치토스')]

위 같은 결과를 위해서 itertools.zip_longest() 함수를 사용하게 되면 개수가 많은 것을 기준으로 묶을 수가 있습니다.
여기서 부족한 항목은 None 으로 채우게 되는데, fillvalue 에 값을 지정을 해주면 None 대신 다른 값을 채울 수가 있습니다.

Python
# snacks2.py
import itertools

children = ['박영재', '한관민', '황영철', '이승민', '이보라']
snacks = ['젤리', '초콜렛', '사탕']

result = itertools.zip_longest(children, snacks, fillvalue='치토스')
print(list(result))

itertools.zip_longest 함수를 이용해 위에서 언급한 내용을 실행 시켜 보았습니다.

Python
(py_study_31010) D:\Dropbox\02.My_Job\80.Study\01.Python\00.study_python_3.11.0\01.TEST>python snacks2.py
[('박영재', '젤리'), ('한관민', '초콜렛'), ('황영철', '사탕'), ('이승민', '치토스'), ('이보라', '치토스')]

  • 이 포스팅은 ‘위키독스’ 의 ‘점프 투 파이썬‘ 전자책을 구매하여 독학하기 위한 자료로 작성했습니다.
71. 파이썬 표준 라이브러리 itertools.zip_longest

Leave a Comment