[Python] zip, enumerate

미남로그·2021년 12월 29일
0

후... 파이썬 기초 공사😩


Enumerate

List의 element를 추출할 때 번호를 붙여서 추출

for i, v in enumerate(['python', 'is', 'so fun']):
    print(i, v)

Out:
0 python
1 is
2 so fun

enumerate는 list의 element, 각 요소들을 추출할 때 번호를 붙여서 추출해주는 방식입니다.

for문을 통해 하나씩 추출하였고, index처럼 0번부터 하나씩 매칭해서 값이 나오는 걸 볼 수 있습니다.

mylist = ['python', 'is', 'so', 'fun']

print(list(enumerate(mylist)))

Out:
[(0, 'python'), (1, 'is'), (2, 'so'), (3, 'fun')]

mylist라는 새로운 리스트를 만들어주고, mylist에 먼저 enumerate를 해주고 또 list 안에 담았다.

이렇게 하는 경우는 list에 있는 index와 값을 unpacking하여 list로 저장해주는 방식이다.

unpacking이란 변수에서 여러 개의 값을 꺼내오는 것을 의미한다고 한다!

패킹 : 하나의 변수에 여러 개의 값을 넣는 것

언패킹 : 패킹된 변수에서 여러 개의 값을 꺼내오는 것

print({i:j for i, j in enumerate('Python is so fun and easy'.split())})

Out:
{0: 'Python', 1: 'is', 2: 'so', 3: 'fun', 4: 'and', 5: 'easy'}

위처럼 코드를 쓸 경우 dict로 나온다.

{ } 안에 넣어준 코드를 살펴보면

i:j for i, j in enumerate('Python is so fun and easy'.split())

해당 코드이다.

'Python ~ easy'라는 문자열을 split하여 공백 기준으로 나눠주고, 그 단어들을 enumerate를 통해 dict 구조로 unpacking 하였다.

후 숨찬다...

여기까지 enumerate의 활용을 알아보았다.

그 다음은 집🏠 ~~~


Zip

두 개의 list 값을 병렬적으로 추출함

zip의 경우 두 개의 list의 값을 병렬적으로 추출하는 함수이다.

a = ['a', 'b', 'c']
b = ['d', 'e', 'f']

for i, j in zip(a,b):
    print(i, j)

Out:
a d
b e
c f

위의 코드를 살펴보면

a 리스트와 b 리스트가 존재하고 for문에 zip 함수를 사용하여 a와 b의 리스트를 하나씩 1:1 매칭하여 출력한 것 같다.

list 값을 병렬적으로 추출하였다!

a,b,c = zip((1,2,3), (10,20,30), (100,200,300))
print(a,b,c)

Out:
(1, 10, 100) (2, 20, 200) (3, 30, 300)

a, b, c에 zip을 사용하여 각 tuple에서 같은 index 끼리 뭉치게 되었다.

0번째 인덱스인 1, 10, 100, 1번째 인덱스인 2, 20, 200 ... 이 묶이는 구조.

그러면 각 tuple을 같은 index끼리 묶어 합을 list로 변환을 해보려고 한다.

print([sum(x) for x in zip((1,2,3), (10,20,30), (100,200,300))])

Out:
[111, 222, 333]

각 tuple의 같은 인덱스끼리의 합이 sum 함수를 통해 계산되어 리스트에 담겼다.

[(1+10+100), (2+20+200), (3+30+300)]

이렇게 이해하면 된다!


Enumerate & Zip

이번엔 enumerate와 zip을 한 꺼번에 사용하는 코드인듯 하다.

a = ['a', 'b', 'c']
b = ['d', 'e', 'f']

for i, (j, v) in enumerate(zip(a,b)):
    print(i, j, v) # index a[index] b[index] 표시

Out:
0 a d
1 b e
2 c f

해당 코드는 괄호 안에꺼부터 먼저 보면!

zip을 통해 a, b 의 리스트가 같은 인덱스끼리 a d, b e, c f 이렇게 합쳐졌고,

enumerate를 통해 0, 1, 2의 index가 붙어 차례대로 출력되었다!👍


항상 볼 때마다 헷갈리는 zipenumerate를 한 번 더 보고 정리해서 좋았던 시간!

파이팅!

Reference

🔗 머신러닝을 위한 파이썬 강의

무료 강의입니다! 강추!

profile
미남이 귀엽죠

0개의 댓글