파이썬의 내장함수(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') |
>>> 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)] |
기본 동작과 달리 하나의 반복 가능 항목이 다른 반복 가능 항목보다 먼저 소진되면 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 |
'Python' 카테고리의 다른 글
(파이썬) 장애물 피하기 게임 소스 (0) | 2024.01.09 |
---|---|
(파이썬) 카운트다운, 정해진 시간 안에 숫자 맞히기 게임 (0) | 2024.01.06 |
(파이썬) 내장함수 tuple() 튜플 (0) | 2024.01.05 |
(파이썬) 내장함수 sorted() 정렬 (0) | 2024.01.04 |
(파이썬) 내장함수 slice() 슬라이스 (0) | 2024.01.04 |