[Python] Zip

2023. 4. 19. 14:59·개발 (Development)/Python

파이썬의 내장함수 zip()에 대해 알아보려고 한다.

1. zip() 기본 문법

zip() 함수는 여러 개의 순회 가능한(iterable) 객체를 인자로 받고, 각 객체가 담고 있는 원소를 튜플의 형태로 차례로 접근할 수 있는 반복자(iterator)를 반환한다.

>>> numbers = [1, 2, 3]
>>> letters = ["A", "B", "C"]
>>> for pair in zip(numbers, letters):
...     print(pair)
...
(1, 'A')
(2, 'B')
(3, 'C')

위 코드를 보면 numbers 리스트와 letters 리스트를 zip() 함수에 인자로 넘겨서 호출 후에 for 문으로 zip() 함수의 반환값을 대상으로 루프를 돌면서 튜플을 차례로 출력하고 있다. zip() 함수를 사용하지 않고, 인덱스(index) 변수를 사용해서 위 코드를 다시 작성해보자.

>>> numbers = [1, 2, 3]
>>> letters = ["A", "B", "C"]
>>> for i in range(3):
...     pair = (numbers[i], letters[i])
...     print(pair)
...
(1, 'A')
(2, 'B')
(3, 'C')

위와 같이 zip() 함수를 사용하면 마치 옷의 지퍼를 올리는 것 처럼 양 측에 있는 데이터를 하나씩 차례로 짝을 지어준다.

2. 병렬 처리

zip() 함수를 활용하면 여러 그룹의 데이터를 루프를 한 번만 돌면서 처리할 수 있다. 가변 인자를 받기 때문에 2개 이상의 인자를 넘겨서 병렬 처리를 할 수 있다. 아래 코드는 3개의 문자열 내의 글자를 하나씩 병렬해서 출력한다.

>>> for number, upper, lower in zip("12345", "ABCDE", "abcde"):
...     print(number, upper, lower)
...
1 A a
2 B b
3 C c
4 D d
5 E e

튜플의 원소를 3개의 변수에 할당하기 위해서 for 문에서 인자 풀기(unpacking)를 해주었다.

3. unzip

zip() 함수로 엮어 놓은 데이터를 다시 해체(unzip)하고 싶을 때도 zip() 함수를 사용할 수 있다.먼저 zip() 함수로 2개의 튜플의 데이터를 엮은 후 리스트로 변환한다.

>>> numbers = (1, 2, 3)
>>> letters = ("A", "B", "C")
>>> pairs = list(zip(numbers, letters))
>>> print(pairs)
[(1, 'A'), (2, 'B'), (3, 'C')]

이 리스트 앞에 풀기(unpacking) 연산자 붙여서 다시 zip() 함수에 넘기면 다시 원래의 2개의 튜플을 얻을 수 있다.

>>> numbers, letters = zip(*pairs)
>>> numbers
(1, 2, 3)
>>> letters
('A', 'B', 'C')

4. 사전 변환

zip() 함수를 이용하면 두 개의 리스트나 튜플 부터 쉽게 사전(dictionary)을 만들 수 있다. 키를 담고 있는 리스트와 값을 담고 있는 리스트를 zip() 함수에 넘긴 후, 그 결과를 다시 dict() 함수에 넘기면 된다.

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

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

다른 예로, 날짜 데이터의 필드 이름 리스트와 필드 값 리스트를 사전으로 변환하면 아래와 같다.

>>> dict(zip(["year", "month", "date"], [2001, 1, 31]))
{'year': 2001, 'month': 1, 'date': 31}

5. 주의사항

zip() 함수로 넘기는 인자의 길이가 다를 때는 주의해야한다. 왜냐하면 가장 짧은 인자를 기준으로 데이터가 엮이고, 나머지는 버려지기 때문이다.

>>> numbers = ["1", "2", "3"]
>>> letters = ["A"]
>>> list(zip(numbers, letters))
[('1', 'A')]

[출처]

https://www.daleseo.com/python-zip/

 

파이썬의 zip() 내장 함수로 데이터 엮기

Engineering Blog by Dale Seo

www.daleseo.com

 

반응형

'개발 (Development) > Python' 카테고리의 다른 글

[Python] try, except 문에서 Exception이 여러 개일 경우  (0) 2024.04.17
[Python] List Comprehension  (0) 2024.04.17
[Python] 리눅스 환경에서 윈도우 환경으로 파일 저장 (SMB 프로토콜)  (0) 2024.04.12
[Python] 실행 시간 측정  (0) 2024.04.02
[Python] Lambda  (0) 2023.04.19
'개발 (Development)/Python' 카테고리의 다른 글
  • [Python] List Comprehension
  • [Python] 리눅스 환경에서 윈도우 환경으로 파일 저장 (SMB 프로토콜)
  • [Python] 실행 시간 측정
  • [Python] Lambda
LoopThinker
LoopThinker
모르는 것을 알아가고, 아는 것을 더 깊게 파고드는 공간
  • LoopThinker
    CodeMemoir
    LoopThinker
  • 전체
    오늘
    어제
    • 분류 전체보기 (182)
      • 개발 (Development) (118)
        • Algorithm (1)
        • Angular (1)
        • AWS (4)
        • DeepSeek (2)
        • Docker (6)
        • Git (3)
        • Java (19)
        • JavaScript (4)
        • Kafka (4)
        • Kubernetes (2)
        • Linux (6)
        • PostgreSQL (32)
        • Python (17)
        • React (3)
        • TypeScript (3)
        • Vue.js (5)
        • General (6)
      • 데이터 분석 (Data Analysis) (1)
      • 알고리즘 문제 풀이 (Problem Solving.. (27)
      • 자격증 (Certifications) (24)
        • ADsP (14)
        • 정보처리기사 (4)
        • Linux Master (5)
        • SQLD (1)
      • 기술 동향 (Tech Trends) (10)
      • 기타 (Others) (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    자바
    리눅스 마스터
    pandas
    PostgreSQL
    Linux master
    docker
    JSON
    백준온라인저지
    리눅스 마스터 2급
    deepseek
    Kubernetes
    리눅스 마스터 2급 2차
    백준자바
    백준알고리즘
    백준
    AWS
    오답노트
    python
    javascript
    java
    Vue
    springboot
    Linux
    typescript
    Kafka
    ADsP
    데이터분석
    Vue.js
    MyBatis
    DevOps
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
LoopThinker
[Python] Zip
상단으로

티스토리툴바