-
[Python] 반복 가능한 객체의 언패킹Coding/Python 2022. 12. 22. 17:04
Iteration
파이썬에서 반복 $($iteration$)$은 파이썬 컨테이너 $($리스트, 튜플, 딕셔너리 등$)$에서 지원하는 연산이다.
반복 가능한 객체에 대해서는 일반적으로 for 루프를 이용해 객체의 값을 하나씩 순회하거나 in 연산자를 이용해 멤버 검사 등을 할 수 있다.
반복 가능한 객체를 for 문에서 순회하는 예시는 다음과 같다.
>>> l = [1,2,3,4] >>> for x in l: print(x) 1 2 3 4
이 포스트에서는 반복 가능한 객체의 언패킹을 알아본다.
Unpacking
파이썬에서 언패킹이란 반복 가능한 객체의 여러 값들을 각각 다른 변수 등에 저장하는 것을 말한다.
가장 간단한 예시로 다음이 있다.
>>> l = [1,2] >>> a, b = l >>> a 1 >>> b 2
리스트 l에 1, 2를 저장하고, a, b에 각각 하나의 값을 대입해주었다.
반복 가능한 객체에 대해서는 언패킹이 가능하다. 따라서 다음의 연산도 가능하다.
>>> s = "abc" >>> x, y, z = s >>> x 'a' >>> y 'b' >>> z 'c'
언패킹한 값을 무조건 변수에 저장할 필요는 없다.
다음은 문자열을 언패킹하여 딕셔너리에 저장하는 코드이다.
>>> s = "abc" >>> d = {} >>> d['x'], d['y'], d['z'] = s >>> d {'x': 'a', 'y': 'b', 'z': 'c'}
반복 가능한 객체를 언패킹할 때, 좌변 항목의 개수는 우변 항목의 개수와 일치해야 한다.
중첩된 객체는 아래와 같이 언패킹할 수 있다.
>>> datetime = ((2022,12,22),(20,45,13)) >>> (year,month,day), (hour,minute,second) = datetime >>> year 2022 >>> month 12 >>> hour 20 >>> second 13
언패킹할 때 필요없는 값은 _ $($underbar$)$를 이용해서 값을 무시할 수 있다.
위의 datetime을 언패킹하는 예제에서 second 값과 year 값이 필요 없다면 아래와 같이 할 수 있다.
>>> datetime = ((2022,12,22),(20,45,13)) >>> (_,month,day), (hour,minute,_) = datetime >>> month 12 >>> hour 20
언패킹할 때 언패킹할 객체의 항목 개수를 알 수 없다면 *$($asterisk$)$를 이용할 수 있다.
>>> l = [1,2,3,4] >>> a,b,*extra = l >>> a 1 >>> b 2 >>> extra [3, 4]
a, b에 저장하고 남은 값은 extra에 리스트 형식으로 저장된다.
별표 변수가 항상 가장 뒤에 올 필요는 없다.
>>> l = [1,2,3,4] >>> a,*extra,b = l >>> a 1 >>> b 4 >>> extra [2, 3]
중간의 두 값이 extra에 저장되었다.
Splatting
반복 가능한 객체들을 합칠 때 별표를 이용할 수 있다.
>>> items = [1,2,3] >>> a = [10, *items, 11] >>> b = {*items, 10, *items} >>> c = (*items, 11, *items) >>> a [10, 1, 2, 3, 11] >>> b {10, 1, 2, 3} >>> c (1, 2, 3, 11, 1, 2, 3)
items라는 리스트를 별표를 이용해 리스트 a, 집합 b, 튜플 c에 집어넣었다.
참고자료 <파이써닉한 파이썬을 익히는 간결한 안내서>
'Coding > Python' 카테고리의 다른 글
[Python] 객체와 클래스, 스페셜 메소드 (0) 2022.12.19