파이썬에서 Zip 함수를 사용하는 방법

How Use Zip Function Python



이 기사에서는 Python의 표준 모듈 라이브러리에서 사용할 수 있는 zip 함수에 대한 가이드를 다룹니다. 이 방법을 사용하면 여러 반복 가능한 개체의 요소를 결합하고 쌍을 만들 수 있습니다. 그런 다음 이러한 쌍에 대해 추가 논리를 실행할 수 있습니다. 많은 경우에 zip 함수를 사용하는 것이 여러 개의 중첩 for 루프를 사용하는 것보다 훨씬 더 효율적이고 깔끔합니다.

Zip 기능 정보

앞서 언급했듯이 zip 함수는 반복 가능한 여러 객체의 요소에서 쌍을 만드는 데 사용됩니다. zip 함수의 기본 구문과 사용법을 이해하려면 아래 예를 고려하십시오.







목록1= ['에게', 'NS', '씨']
목록2= ['사과', '공', '고양이']
압축= 지퍼(목록1,목록2)
인쇄 (목록(압축))

위 코드 샘플의 처음 두 문은 일부 요소를 포함하는 두 목록을 정의합니다. 다음으로, zip 함수는 list1 및 list2 변수를 인수로 전달하여 사용합니다. 이것은 zip 함수의 주요 구문입니다. 결합하려는 요소의 인수로 목록 또는 기타 유효한 순서가 지정된 이터러블을 전달하기만 하면 됩니다. 마지막으로 print 문은 압축된 변수의 출력을 가져오는 데 사용됩니다. 위에서 언급한 코드 샘플을 실행한 후 다음과 같은 출력을 얻어야 합니다.



[('a', 'apple'), ('b', 'ball'), ('c', 'cat')]

zip 함수는 목록이 아닌 zip 유형 객체를 반환합니다. 위의 print 문과 같이 iterable 형식으로 변환해야 합니다.



간단히 말해서 zip 함수는 두 목록에서 동일한 인덱스의 요소를 선택하여 튜플의 쌍으로 결합합니다. 따라서 list1의 0번째 요소는 list2의 0번째 요소와 결합되고, list1의 첫 번째 요소는 list2의 첫 번째 요소와 결합되는 식입니다. Zip 함수는 왼쪽에서 오른쪽으로 이동하며 쌍을 이루는 요소를 포함하는 튜플은 저장된 요소와 동일한 인덱스를 갖습니다.





Iterables에 동일한 수의 요소가 없을 때 Zip 사용

위에 언급된 예에서 두 목록에는 동일한 수의 요소가 있습니다. 두 목록에 동일한 수의 요소가 없는 코드를 처리하는 경우 zip 함수는 요소 수가 가장 적은 목록의 마지막 요소에서 멈춥니다.

아래 예에서 zip 함수는 하나 이상의 요소가 있는 list2에 관계없이 c 요소에서 중지됩니다.



목록1= ['에게', 'NS', '씨']
목록2= ['사과', '공', '고양이', '인형']
압축= 지퍼(목록1,목록2)
인쇄 (목록(압축))

위에서 언급한 코드 샘플을 실행한 후 다음과 같은 출력을 얻어야 합니다.

[('a', 'apple'), ('b', 'ball'), ('c', 'cat')]

Zip 함수를 사용할 때 두 개 이상의 Iterable을 사용할 수 있습니다.

일반적으로 zip 함수는 두 개의 반복 가능한 객체를 비교하는 데 사용됩니다. 그러나 zip 함수에 대한 인수로 iterable을 원하는 수만큼 전달할 수 있습니다. 가장 짧은 목록의 마지막 요소에서 중지하는 원칙은 여전히 ​​적용됩니다.

목록1= ['에게', 'NS', '씨']
목록2= ['사과', '공', '고양이', '인형']
목록3= ['5', '삼']
압축= 지퍼(목록1,목록2,목록3)
인쇄 (목록(압축))

위에서 언급한 코드 샘플을 실행한 후 결과로 다음 출력을 얻어야 합니다.

[('a', 'apple', '5'), ('b', 'ball', '3')]

Zip 유형 개체에서 개별 목록 만들기

zip 객체가 이미 있는 경우 zip 함수가 처음 호출되었을 때 이전에 사용되었던 개별 목록을 다시 채우는 데 사용할 수 있습니다.

목록1= ['에게', 'NS', '씨']
목록2= ['사과', '공', '고양이', '인형']
목록3= ['5', '삼']
압축= 지퍼(목록1,목록2,목록3)
l1,l2,l3= 지퍼(*압축)
인쇄 (목록(l1), 목록(l2), 목록(l3))

위에서 언급한 코드 샘플을 실행한 후 결과로 다음 출력을 얻어야 합니다.

['a', 'b'] ['사과', '공'] ['5', '3']

위의 코드 샘플에서 zip 객체는 * 연산자를 사용하여 수축됩니다. 수축된 결과는 원본 목록을 생성하는 zip 함수에 대한 또 다른 호출에 제공됩니다. zip 객체가 처음 생성될 때 길이가 다른 목록이 사용된 경우 모든 요소를 ​​원래 목록으로 다시 가져오지 못할 수 있습니다.

가장 긴 반복 가능한 요소를 유지하려는 경우 Zip 사용

위의 여러 예에서 zip 함수가 기본적으로 가장 짧은 반복 가능한 요소의 마지막 요소에서 중지되는 것을 관찰했을 수 있습니다. 가장 긴 iterable의 마지막 요소에 도달할 때까지 계속 반복하려면 어떻게 해야 할까요?

이러한 경우 Python의 itertools 모듈에서 zip_longest() 메서드를 사용해야 합니다. zip 함수와 동일하게 작동하지만 가장 긴 반복 가능한 유형의 마지막 요소에서 중지한다는 작은 차이점이 있습니다.

~에서 itertools 수입zip_longest
목록1= ['에게', 'NS', '씨']
목록2= ['사과', '공', '고양이', '인형']
목록3= ['5', '삼']
압축=zip_longest(목록1,목록2,목록3)
인쇄 (목록(압축))

위에서 언급한 코드 샘플을 실행한 후 결과로 다음 출력을 얻어야 합니다.

[('a', 'apple', '5'), ('b', 'ball', '3'), ('c', 'cat', None), (None, 'doll', None) ]

누락된 값은 None 유형 개체로 채워집니다. zip_longest 메서드에 추가 fillvalue 인수를 전달하여 채울 고유한 값을 제공할 수도 있습니다.

~에서 itertools 수입zip_longest
목록1= ['에게', 'NS', '씨']
목록2= ['사과', '공', '고양이', '인형']
목록3= ['5', '삼']
압축=zip_longest(목록1,목록2,목록3,채우기 값='my_value')
인쇄 (목록(압축))

위에서 언급한 코드 샘플을 실행한 후 결과로 다음 출력을 얻어야 합니다.

[('a', 'apple', '5'), ('b', 'ball', '3'), ('c', 'cat', 'my_value'), ('my_value', '인형 ', 'my_value')]

결론

Zip 함수는 일부 루프 및 조건문을 사용하여 에뮬레이트될 수 있습니다. 그러나 불필요한 장황함과 반복적인 문장을 제거하여 코드를 정리하고 깔끔하게 유지하는 데 도움이 됩니다.