목차 - 클릭하면 이동합니다.
파이썬 zip() 함수
파이썬을 설치하면 별도의 모듈을 추가하지 않아도 바로 사용할 수 있는 내장함수인 zip() 함수는 두 개 또는 그 이상의 배열 데이터의 요소를 순차적으로 엮을 수 있는 함수인데요.
파이썬으로 코딩 테스트를 준비하시는 분들은 배열을 조합을 하여 처리하는 문제가 많으니 알아두시면 아주 유용한 함수 입니다.
zip() 함수 사용하기
배열 2개 사용
numbers = [1, 2, 3, 4]
letters = ['a', 'b', 'c', 'd']
zipped = zip(numbers, letters)
print(type(zipped))
zipped = list(zipped)
print(zipped)
실행결과 |
<class 'zip'> [(1, 'a'), (2, 'b'), (3, 'c'), (4, 'd')] |
위와 같이 배열 두 개를 zip(배열1, 배열2)로 묶으면 두 배열의 요소가 순차적으로 엮인 튜플 형태의 배열로 만들 수 있습니다.
zip()을 실행한 결과는 zip 타입으로 list()를 이용해 리스트 타입으로 변환하여 사용할 수 있습니다.
배열 3개 이상 사용
numbers = [1, 2, 3, 4]
letters = ['a', 'b', 'c', 'd']
upper_letters = ['A', 'B', 'C', 'D']
zipped = zip(numbers, letters, upper_letters)
zipped = list(zipped)
print(zipped)
실행결과 |
[(1, 'a', 'A'), (2, 'b', 'B'), (3, 'c', 'C'), (4, 'd', 'D')] |
zip으로 묶을 수 있는 배열은 n개까지 가능하기 때문에 위와 같이 3개의 배열을 사용해도 문제 없이 3개의 배열의 요소를 순차적으로 묶을 수 있습니다.
서로 다른 개수의 배열 사용
numbers = [1, 2, 3]
letters = ['a', 'b', 'c', 'd']
upper_letters = ['A', 'B', 'C', 'D', 'E']
zipped = zip(numbers, letters, upper_letters)
zipped = list(zipped)
print(zipped)
실행결과 |
[(1, 'a', 'A'), (2, 'b', 'B'), (3, 'c', 'C')] |
서로 다른 개수의 요소를 가진 배열끼리 zip()을 수행하면 가장 작은 배열의 요소 개수에 맞춰 집니다.
위의 예시에서 보시다시피 numbers의 배열이 3개의 요소를 가지고 있기 때문에 더 많은 요소를 가진 letters와 upper_letters의 4번째 이상 요소는 무시됩니다.
unzip() ???
numbers = [1, 2, 3, 4, 5]
letters = ['a', 'b', 'c', 'd', 'e']
# Zip()
zipped = zip(numbers, letters)
zipped = list(zipped)
print("Zipped List:", zipped)
# UnZip()
unzip_numbers, unzip_letters = zip(*zipped)
print("Unzipped numbers:", list(unzip_numbers))
print("Unzipped letters:", list(unzip_letters))
실행결과 |
Zipped List: [(1, 'a'), (2, 'b'), (3, 'c'), (4, 'd'), (5, 'e')] Unzipped numbers: [1, 2, 3, 4, 5] Unzipped letters: ['a', 'b', 'c', 'd', 'e'] |
zip()의 반대로 unzip()이라는 명령어가 있을 것 같지만 사실은 존재하지 않습니다. 하지만 unzip과 같은 효과를 만드려면 unpack 오퍼레이터인 *을 사용하면 원하는 결과를 얻을 수 있습니다.
zip() 결과 정렬하기
numbers = [1, 3, 2, 4, 5]
letters = ['d', 'e', 'a', 'c', 'b']
upper_letters = ['A', 'B', 'D', 'C', 'E']
# Zip() and Sorted()
zipped = sorted(zip(numbers, letters, upper_letters))
print("Zipped Sorted List:", zipped)
실행결과 |
Zipped Sorted List: [(1, 'd', 'A'), (2, 'a', 'D'), (3, 'e', 'B'), (4, 'c', 'C'), (5, 'b', 'E')] |
zip을 수행한 결과는 별도의 타입 전환 없이 바로 sorted() 함수에 넣어 정렬할 수 있으며 기본적인 sorted() 함수의 동작 방식대로 배열의 첫번째 요소 기준으로 정렬되기 때문에 numbers 배열 기준으로 정렬이 됨을 확인할 수 있습니다.
numbers = [1, 3, 2, 4, 5]
letters = ['d', 'e', 'a', 'c', 'b']
upper_letters = ['A', 'B', 'D', 'C', 'E']
# Zip() and Sorted()
zipped = sorted(zip(numbers, letters, upper_letters), key=lambda x: x[1])
print("Zipped Sorted List:", zipped)
실행결과 |
Zipped Sorted List: [(2, 'a', 'D'), (5, 'b', 'E'), (4, 'c', 'C'), (1, 'd', 'A'), (3, 'e', 'B')] |
sorted 함수에 key와 lambda 함수를 사용하여 첫 번째 요소가 아닌 다른 요소 기준으로 정렬을 할 수도 있으니 참고하시면 좋을 것 같습니다.
딕셔너리로 활용하기
key = ['name', 'age', 'gender']
value = ['Jone', 35, 'Male']
# Zip()
zipped = dict(zip(key, value))
print("Zipped Dictionary:", zipped)
실행결과 |
Zipped Dictionary: {'name': 'Jone', 'age': 35, 'gender': 'Male'} |
zip을 딕셔너리 형태로 활용하면 key, value 형태로 묶을 수 있습니다. zip타입을 dict()를 이용해 타입만 변환해 주면 dictionary 형태로 변환이 가능합니다.
마치며
이번 시간에는 파이썬 내장함수인 zip() 함수의 사용법에 대해서 살펴 보았습니다. 파이썬에서 여러 배열간의 조합 및 계산은 실제 코딩 시 많이 사용되기 때문에 숙지해 두시면 추후 도움이 많이 되리라 생각 됩니다.
블로그를 구독하면 소식을 조금 더 빨리 받아보실 수 있습니다. 감사합니다.
'코딩스토리 > 파이썬' 카테고리의 다른 글
파이썬 YAML 사용방법 (1) | 2023.11.02 |
---|---|
파이썬 람다(lambda) 사용방법 (2) | 2022.05.17 |
파이썬 코딩 - 파일 읽기 - readline() (1) | 2021.11.19 |
파이썬 코딩 - 파일 및 디렉터리 생성 및 파일에 내용 쓰기 - write() (0) | 2021.11.16 |
파이썬 코딩 - 날짜형 문자형 변환 및 시간차이 계산하기 - strftime, strptime (0) | 2021.11.12 |
파이썬 코딩 - 리스트/딕셔너리 정렬하기 - sorted()함수 (0) | 2021.11.12 |