Python

(파이썬) 내장함수 zip()

enjoy-country-life 2024. 1. 5. 13:03
반응형

파이썬의 내장함수(Built-in Function)인 zip() 함수에 대해 알아봅니다.

 

zip(*iterables, strict=False)

여러 개의 이터러블(반복 가능한 데이터) 항목을 병렬로 반복하여 각각의 항목이 포함된 튜플(tuple)를 생성합니다.

 

예:

>>> for item in zip([1, 2, 3], ['sugar', 'spice', 'everything nice']):
...    print(item)
...

(1, 'sugar')
(2, 'spice')
(3, 'everything nice')

(파이썬) 내장함수 zip()

 

>>> list(zip([1,2,3], [11,22,33]))
[(1, 11), (2, 22), (3, 33)]

 

기본적으로 zip()은 가장 짧은 반복 가능 항목이 소진되면 중지됩니다. 더 긴 반복 가능 항목의 나머지 항목을 무시하고 결과를 가장 짧은 반복 가능 길이로 잘라냅니다.

>>> list(zip(range(3), ['fee', 'fi', 'fo', 'fum']))
[(0, 'fee'), (1, 'fi'), (2, 'fo')]

 

zip()은 반복 가능한 항목의 길이가 동일하다고 가정되는 경우에 자주 사용됩니다. 이러한 경우 strict=True 옵션을 사용하는 것이 좋습니다. 출력은 일반 zip()과 동일합니다.

>>> list(zip(('a', 'b', 'c'), (1, 2, 3), strict=True))
[('a', 1), ('b', 2), ('c', 3)]

(파이썬) 내장함수 zip()

 

기본 동작과 달리 하나의 반복 가능 항목이 다른 반복 가능 항목보다 먼저 소진되면 ValueError가 발생합니다.

for item in zip(range(3), ['fee', 'fi', 'fo', 'fum'], strict=True):  
    print(item)

(0, 'fee')
(1, 'fi')
(2, 'fo')
Traceback (most recent call last):
  File "<pyshell#42>", line 1, in <module>
    for item in zip(range(3), ['fee', 'fi', 'fo', 'fum'], strict=True):
ValueError: zip() argument 2 is longer than argument 1

 

반복 가능 항목의 왼쪽에서 오른쪽 평가 순서가 보장됩니다. 이는 zip(*[iter(s)]*n, strict=True)을 사용하여 데이터 시리즈를 n 길이 그룹으로 클러스터링하는 관용구를 가능하게 합니다. 이는 동일한 반복자를 n번 반복하여 각 출력 튜플이 반복기에 대한 n 호출의 결과를 갖게 합니다. 이는 입력을 n 길이의 청크로 나누는 효과가 있습니다.

 

zip()을 * 연산자와 함께 사용하면 목록의 압축을 풀 수 있습니다.

>>> x = [1, 2, 3]
>>> y = [4, 5, 6]
>>> list(zip(x, y))
[(1, 4), (2, 5), (3, 6)]

>>> x2, y2 = zip(*zip(x, y))
>>> x == list(x2) and y == list(y2)
True

(파이썬) 내장함수 zip()

반응형