[algo] zip( ) 함수

letsbebrave·2022년 6월 1일
2

algorithm

목록 보기
15/16

zip( )

두 그룹의 데이터를 서로 엮어주는 파이썬의 내장함수
for 문에서 zip을 쓰는 경우

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

그냥 둘을 바로 엮어서 list로 묶어준 경우

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

리스트 두 개를 엮어서 dictionary로 묶어준 경우

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

병렬 처리

가변 인자를 받기 때문에 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

unzip( )

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

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

zip( )을 쓴 풀이 예시

모의고사

from itertools import cycle
def solution(answers):
    answer = []
    
    ans_1 = cycle([1, 2, 3, 4, 5,])
    ans_2 = cycle([2, 1, 2, 3, 2, 4, 2, 5,])
    ans_3 = cycle([3, 3, 1, 1, 2, 2, 4, 4, 5, 5])

    
    cor_1 = cor_2 = cor_3 = 0
    
    for real_answer, a1, a2, a3 in zip(answers, ans_1, ans_2, ans_3):
        if real_answer == a1 :
            cor_1 += 1
        if real_answer == a2 :
            cor_2 += 1
        if real_answer == a3 :
            cor_3 += 1
    
    answer = [cor_1, cor_2, cor_3]
    answer = [i for i,v in enumerate(answer, start=1) if v >= max(answer)]
    
    return answer
profile
그게, 할 수 있다고 믿어야 해

0개의 댓글