python/코딩테스트

[python] zip함수 정리

밍꽁✨ 2022. 7. 13. 14:58
반응형

프로그래머스로 문제를 풀고 나서 다른 사람들의 풀이를 볼 때 흔히 zip()함수를 쓰는 것을 볼 수 있다.

늘 리스트나 문자열의 원소를 for문을 돌려서 자료를 하나씩 빼곤 했는데

여러 원소를 한 번에 빼내야 하는 경우 zip함수의 가독성이 더욱 높다고 판단했다!


 1) 여러 변수의 객체를 인자로 받아 차례로 반환

* for문을 사용하는 경우

numbers = [1,2,3]
letters = ['A','B','C']

for i in range(3):
    pair = (number[i],letters[i])
    print(pair)

*zip 함수를 사용하는 경우

number = '12345'
upper = 'ABCDE'
lower = 'abcde'

for n,u,l in zip(number, upper, lower):
	print(n,u,l)

그러면 순서대로 

1 A a

2 B b.. 처럼 출력된다.


2) zip()함수로 엮어 놓은 데이터를 다시 해제하기

# zip()함수로 2개의 튜플을 엮은 후 리스트로 반환
numbers = (1,2,3)
letters = ('A','B','C')
pairs = list(zip(numbers,letters))

# 리스트 앞에 풀기 연산자를 붙여 다시 원래의 튜플로 나누기
numbers,letters = zip(*pairs)

3) 전치행렬 생성하기

a = [[1,2,3],[4,5,6],[7,8,9]]
b = list(zip(*a))

>> [(1,4,7),(2,5,8),(3,6,9)]

a 리스트의 각 요소인 리스트 들을 zip으로 묶어줄 수 있다. 이를 통해 transform 한 효과를 확인할 수 있다.


4) 딕셔너리 만들기

A = ['name','age','phone','gender']
B = ['CHAN',28,'010-xxxx-xxxx','male']
d = dict(zip(A,B))

>> {'name':'CHAN','age':28,'phone':'010-xxxx-xxxx','gender':'male'}

A 리스트의 값을 key로, B 리스트의 값을 value로 사용해서 딕셔너리를 생성한다. 즉 zip함수를 활용해 딕셔너리를 손쉽게 만들 수 있다.

반응형