본문 바로가기

빅데이터(Big Data) 이론과 코드/2. 데이터 전처리

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

파이썬 내장 함수 zip 함수에 대해 알아봅니다.

zip 함수는 여러 iterable을 병렬로 반복하여 각 iterable의 항목으로 튜플을 생성합니다.

 

1. 두 개 이상의 반복 값을 묶어주고 싶을 때 사용

 

바로 예를 들어보면,

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

zip() 하무 안에 인자값으로 두 개의 리스트를 넣어줬습니다.

첫 번째 [1,2,3]

두 번째 ['sugar', 'spice', 'everything nice']

 

이 두 리스트가 zip함수를 거치고 나서 item으로 반복하면서 뽑아내 주고 출력해준 결과는 아래와 같습니다.

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

 

 

구체적으로 설명하면,

i 번째 튜플은 각 인수 iterables에서 i 번째 요소를 포함하는 zip()튜플의 반복자를 반환합니다.

생각할 수 있는 또 다른 방법 zip()은 행을 열로, 열을 행으로 바꾸는 것입니다. 이것은 행렬을 전치하는 것과 유사합니다

 

 

2. 두 리스트의 길이가 서로 다른 경우

 : 가장 짧은 인자를 기준으로 데이터가 엮이고, 나머지는 버려진다

 

한 가지 고려해야 할 점은 전달된 이터러블의 zip()길이가 다를 수 있다는 것입니다. 

 

 

strict = True  의미 (Python 3.1 이후 버전)

  : 두 리스트의 길이가 서로 다른 경우 Error 출력

 

Python은 이러한 iterable 문제를 처리하기 위해 세 가지 다른 접근 방식을 제공합니다.

 

1. 기본적으로 zip()가장 짧은 반복 가능 항목이 소진되면 중지됩니다. 

더 긴 iterable의 나머지 항목을 무시하고 결과를 가장 짧은 iterable의 길이로 잘라냅니다.

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

 

2. zip()이터러블의 길이가 같은 것으로 가정되는 경우에 자주 사용됩니다. 

이러한 경우 strict=True 옵션을 사용하는 것이 좋습니다. 출력은 regular 와 동일합니다 zip().

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

 

3. 기본 동작과 달리 iterable의 길이가 동일한지 확인하고 일치 ValueError하지 않으면 다음을 발생시킵니다.

list(zip(range(3), ['fee', 'fi', 'fo', 'fum'], strict=True))
Traceback (most recent call last):
  ...
ValueError: zip() argument 2 is longer than argument 1
  • 인수가 없으면 strict=True길이가 다른 이터러블을 생성하는 모든 버그가 침묵되며 프로그램의 다른 부분에서 찾기 어려운 버그로 나타날 수 있습니다.
  • 더 짧은 iterable은 상수 값으로 채워져 모든 iterable이 동일한 길이를 갖도록 할 수 있습니다. 이것은 에 의해 수행됩니다 itertools.zip_longest().

엣지 케이스: 단일 반복 가능한 인수 zip()로 1-튜플의 반복자를 반환합니다. 인수가 없으면 빈 반복자를 반환합니다.

팁과 요령:

  • iterable의 왼쪽에서 오른쪽 평가 순서가 보장됩니다. 이것은 를 사용하여 데이터 시리즈를 n-길이 그룹으로 클러스터링하는 관용구를 가능하게 합니다.이것은 각 출력 튜플이 반복기에 대한 호출 결과를 갖도록 동일한 반복기 시간을 반복합니다. 이것은 입력을 n-길이 청크로 나누는 효과가 있습니다.zip(*[iter(s)]*n, strict=True)nn
  • zip() 연산자와 함께 *목록의 압축을 푸는 데 사용할 수 있습니다.
x = [1, 2, 3]
y = [4, 5, 6]
list(zip(x, y))
[(1, 4), (2, 5), (3, 6)]

 

4. unzip 방법 : 압축을 다시 풀고 싶을 때 (*의미)

아래에서 보는 바와 같이 zip으로 묶인 pair list를 zip 함수에 인자 값으로 전달할 때

" * " 기호를 붙여주고 두 개의 변수에 재 할당해줍니다.

numbers = (1, 2, 3)
letters = ("A", "B", "C")
pairs = list(zip(numbers, letters))

pairs
>>> [(1, 'A'), (2, 'B'), (3, 'C')]

numbers, letters = zip(*pairs)

numbers
>>>(1, 2, 3)

letters
>>> ('A', 'B', 'C')

 

5. dict 함수를 사용해서 key-value 형태로 묶기

dict() 함수에 키와 값으로 이루어진 터플을 넘기면 사전이 생성되는 원리를 이용하는 것입니다.

 

dict(zip(["A", "B", "C"], [1, 2, 3]))
>>> {'A': 1, 'B': 2, 'C': 3}

 

6. 파이썬 내장 함수에 대한 공식 Document 링크

https://docs.python.org/3/library/functions.html#zip

 

Built-in Functions — Python 3.10.2 documentation

Built-in Functions The Python interpreter has a number of functions and types built into it that are always available. They are listed here in alphabetical order. abs(x) Return the absolute value of a number. The argument may be an integer, a floating poin

docs.python.org

 

 

 

반응형
LIST