코딩스토리/파이썬

파이썬 zip() 내장함수 이용하여 배열 데이터 묶기

Tech&Fin 2022. 5. 11. 14:34
반응형

 

목차 - 클릭하면 이동합니다.

     

     

    파이썬 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() 함수의 사용법에 대해서 살펴 보았습니다. 파이썬에서 여러 배열간의 조합 및 계산은 실제 코딩 시 많이 사용되기 때문에 숙지해 두시면 추후 도움이 많이 되리라 생각 됩니다.

     

    블로그를 구독하면 소식을 조금 더 빨리 받아보실 수 있습니다. 감사합니다.

    반응형