ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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

    댓글

Designed by Tistory.