zip

hyyyynjn·2021년 4월 28일
1

python 정리

목록 보기
5/26
post-thumbnail

zip(*iterables)

iterable(순회 가능한) 객체를 인자로 받고, 인자로 받은 객체가 담고 있는 원소를 tuple 형태로 접근할 수 있는 iterator(반복자)를 반환한다.
동일한 개수의 자료형을 묶어주는 역할을 한다.

✍예시

✋여러 iterables 합치기

## 1) list 형
x = [1, 2, 3]
y = [4, 5, 6]
 
zipped = zip(x, y)
print(list(zipped)) # [(1, 4), (2, 5), (3, 6)]

z = [7, 8, 9]
zipped2 = zip(x, y, z)
print(list(zipped2)) # [(1, 4, 7), (2, 5, 8), (3, 6, 9)]

## 2) str 형
a = 'abc'
b = 'def'
 
zipped3 = zip(a, b)
print(list(zipped3)) # [('a', 'd'), ('b', 'e'), ('c', 'f')]

✋다른 유형의 iterables 합치기

Number = [1,2,3,4]
Name = ['hong','gil','dong','nim']
Number_Name = list(zip(Number,name))

print(Number_Name) # [(1 ,'hong'), (2 ,'gil'), (3 ,'dong'), (4 ,'nim')]

✋zip -> dict -> 응용

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

# 1) 최소, 최대값 찾기
d = {'banana': 3, 'apple': 4, 'pear': 1, 'orange':2}
 
min_item = min(zip(d.values(), d.keys()))
max_item = max(zip(d.values(), d.keys()))
print(min_item) # (1, 'pear')
print(max_item) # (4, 'apple')
 
# 2) 오름차순으로 정렬하기
d_sorted = sorted(zip(d.values(), d.keys()))
print(d_sorted) # [(1, 'pear'), (2, 'orange'), (3, 'banana'), (4, 'apple')]
d_sorted2 = sorted(d.items(), key= lambda t:t[1])
print(d_sorted2) # [('pear', 1), ('orange', 2), ('banana', 3), ('apple', 4)]

✋zip 반복문

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

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
'''

❌unzip 👉 ⭕zip!

zip() 함수로 엮어 놓은 데이터를 다시 해체(unzip)하고 싶을 때도 zip() 함수를 사용한다.

  • one, two = list(zip(*one_two))
numbers = (1, 2, 3)
letters = ("A", "B", "C")
pairs = list(zip(numbers, letters))
print(pairs) # [(1, 'A'), (2, 'B'), (3, 'C')]

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

✅ zip_longest

길이가 다른 자료형끼리 zip하면 짧은 길이의 인자를 기준으로 데이터가 엮이고 나머지는 버려진다. -> zip_longest(*iterables, fillvalue=None) 메소드를 사용한다

x = [1, 2, 3]
y = [4, 5, 6,7]
 
zipped = zip(x, y)
print(list(zipped)) # [(1, 4), (2, 5), (3, 6)]

# zip_longest 적용
zipped = zip_longest(x, y)
print(list(zipped)) # [(1, 4), (2, 5), (3, 6), (None, 7)]
 
# fillvalue= 인자에 값을 지정
zipped = zip_longest(x, y, fillvalue=0)
print(list(zipped)) # [(1, 4), (2, 5), (3, 6), (0, 7)]

0개의 댓글