728x90
반응형
zip 함수
zip(*iterables)는 각 iterables 의 요소들을 모으는 이터레이터를 만든다.
튜플의 이터레이터를 돌려주는데, i 번째 튜플은 각 인자로 전달된 시퀀스나 이터러블의 i 번째 요소를 포함한다.
# zip(*iterable) : 동일한 개수로 이루어진 자료형을 묶어 줌
a = ['one', 'two', 'three']
b = ['a', 'b', 'c']
print(list(zip(a, b)))
---------------------------------------------
[('one', 'a'), ('two', 'b'), ('three', 'c')]
a라는 리스트와 b라는 리스트의 값들이 index 순서에 따라서 묶어진 것을 확인할 수 있다.
# 두 리스트의 요소 끄집어내기
# zip 함수 사용한 방법
for val1, val2 in zip(a, b):
print(val1, val2)
-----------------------------------
one a
two b
three c
mylist = [1, 2, 3]
new_list = [40, 50, 60]
for i in zip(mylist, new_list):
print (i)
---------------------------------
(1, 40)
(2, 50)
(3, 60)
반복문에서 특히나 활용하기가 좋다. 반복문을 수행할 때, 두 개의 리스트의 값을 각각 가져와야 할 경우 매우 유용하게 사용할 수 있다.
zip 함수 활용
1. 전치행렬 생성하기
# 전치행렬 생성 (행과 열을 교환)
a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
b = list(zip(*a))
print(b)
----------------------------------------
[(1, 4, 7), (2, 5, 8), (3, 6, 9)]
a 리스트의 각 요소인 리스트 들을 zip으로 묶어줄 수 있다. 이를 통해서 transform 한 것과 같은 효과를 확인할 수 있다.
2.여러 개의 Iterable 동시에 순회할 때
list1 = [1, 2, 3, 4]
list2 = [100, 120, 30, 300]
list3 = [392, 2, 33, 1]
answer = []
for number1, number2, number3 in zip(list1, list2, list3):
print(number1 + number2 + number3)
-------------------------------------------------------------
493
124
66
305
3. dictionary 만들기
A = ['name', 'age', 'phone', 'gender']
B = ['YoonDii', 27, '010-XXXX-YYYY', 'female']
d = dict(zip(A, B))
print(d)
---------------------------------------------------------------------------
{'name': 'YoonDii', 'age': 27, 'phone': '010-XXXX-YYYY', 'gender': 'female'}
A 리스트의 값을 key 값으로 사용하고 B 리스트의 값을 value 값으로 사용하여 딕셔너리를 생성한다.
animals = ['cat', 'dog', 'lion']
sounds = ['meow', 'woof', 'roar']
answer = dict(zip(animals, sounds))
print(answer)
-------------------------------------
{'cat': 'meow', 'dog': 'woof', 'lion': 'roar'}
이런 방식으로 dictionary를 선언해야 할 때, 손쉽게 만들어줄 수 있을 것이다.
enumerate와 마찬가지로 zip함수는 매우 활용도가 높은 내장함수이므로 잘 숙지하고 익히면 좋다.
https://docs.python.org/ko/3/library/functions.html#zip
728x90
반응형
'Python' 카테고리의 다른 글
[Python] 객체 지향 프로그래밍(Object-Oriented Programming, OOP) (2) | 2023.03.06 |
---|---|
[Python] 진법변환 (0) | 2023.02.21 |
[Python] 몫과 나머지 , divmod() (0) | 2023.02.21 |
[Python] 문자열을 날짜, 시간으로 변환하는 방법 (string to date, string to time) - strptime() (0) | 2023.02.03 |
[Python] 날짜, 시간을 문자열로 변환하는 방법 (date to string, time to string) - strftime (2) | 2023.02.03 |
댓글