본문 바로가기
Python

[Python/파이썬] python 내장함수 - zip()

by 댕댕미냉 2023. 1. 3.

zip(*iterables, strict=False)

  • 파이썬 내장 함수 중 하나인 zip 메서드는 iterable한 객체들을 병렬로 iterable하게 꺼내는 메서드입니다. 이 때, 객체는 튜플 상태로 꺼내지게 됩니다.
  • zip 메서드는 lazy 합니다. 즉, iterate 전까지 zip은 처리되지 않습니다.
  • 주로 사용하는 상황은 행과 열이 존재하는 상황에서 이를 바꾸고자 할 때(행을 열로, 열을 행으로) 사용합니다.
test = ["123", "456", "789"]
for case in zip(*test):
    print(case)

"""
('1', '4', '7')
('2', '5', '8')
('3', '6', '9')
"""

word1, word2, word3 = "abc", "def", "ghi"
for case in zip(word1, word2, word3):
    print(case)

"""
('a', 'd', 'g')
('b', 'e', 'h')
('c', 'f', 'i')
"""

 

iterable?

iterable 하다는 것은 반복 가능하다는 것을 의미합니다. 즉, iterable한 객체는 반복 가능한 객체를 의미하며, 대표적인 예로는 list, dict, set, str, tuple, range 등이 있습니다.

 

zip() 사용하기

zip()에 들어오는 argument들은 보통 아래와 같습니다.

  • 객체들의 길이가 같은 경우
  • 객체들의 길이가 다른 경우

zip의 argument로 iterable한 객체들을 넣을 때, 길이가 다른 iterable한 객체들을 넣어도 상관 없습니다. 

 

zip()의 기본 설정은 iterable들 중 가장 짧은 길이의 iterable 만큼 값이 표현되며, 이후 남은 값들은 무시합니다.

word1, word2, word3= "ab", "cdef", "ghijkl"
for case in zip(word1, word2, word3):
    print(case)

"""
('a', 'c', 'g')
('b', 'd', 'h')
"""

 

iterable들의 길이가 다른 상황을 원하지 않는다면, strict=True 옵션을 통해 길이가 다른 경우 에러를 발생시킬 수 있습니다.

strict=True 옵션은 python 3.10에서 새로 생겼습니다.

word1, word2, word3= "ab", "cdef", "ghijkl"
for case in zip(word1, word2, word3m, strict=True):
    print(case)
    
"""
for case in zip(word1, word2, word3, strict=True):
ValueError: zip() argument 2 is longer than argument 1
"""

 

iterable들의 길이가 다른 상황에서 길이가 가장 긴 iterable을 기준으로 zip을 실행시키고 싶다면, itertools.zip_longest()를 통해 이를 해결 할 수 있습니다.

from itertools import zip_longest

word1, word2, word3= "ab", "cdef", "ghijkl"
for case in zip_longest(word1, word2, word3, fillvalue="-"):
    print(case)

"""
('a', 'c', 'g')
('b', 'd', 'h')
('-', 'e', 'i')
('-', 'f', 'j')
('-', '-', 'k')
('-', '-', 'l')
"""

 

zip()에서 argument를 하나만 받는 경우, 1개의 값을 가진 튜플들이 생기며, argument를 받지 않는 경우, 빈 iterator를 반환합니다.

word = "test"
for case in zip(word):
    print(case)

"""
('t',)
('e',)
('s',)
('t',)
"""

for case in zip():
    print(case)

"""
"""

 

 

  • 위 게시글은 파이썬 공식 문서를 기반으로 작성되었습니다.

'Python' 카테고리의 다른 글

[Python/파이썬] python collections - Counter()  (0) 2023.01.04