언패킹

매일 공부(ML)·2022년 5월 29일
0

이어드림

목록 보기
60/146

인덱스를 사용하는 대신 대입을 사용하여 데이터 언패킹

  • tuple: 불변의 순서쌍을 만들어내는 내장 타입

    	- 딕셔너리의 키-값 쌍과 비슷하게 두 값으로 이뤄짐
snack_calories = {
    '감자칩':140,
    '팝콘':80,
    '땅콩':190,
}
items = tuple(snack_calories.items())
print(items)
#(('감자칩':140),('팝콘',80),('땅콩',190))

  • 숫자 인덱스를 사용하여 튜플 값 접근

item = ('호박엿','식혜')
first = item[0]
second = item[1]
print(first, '&', second)

#호박엿 & 식혜
  • 튜플은 변경이 불가 by 인덱싱
pair = ('약과', '호박엿')
pair[0] = '타래과'

#error: tuple object does not support item assignment

언패킹 활용

  • 언패킹 구문 사용 시 한 문장 안에서 여러 값을 대입

  • 튜플이 쌍일 경우 인덱스 대신 두 변수의 이름으로 이뤄진 튜플에 대입

item =  ('호박엿','식혜')
first, second = item #언패킹
print(first, '&', second)

#호박엿 & 식혜
  • 튜플 인덱스를 사용하는 것보다 시각적인 잡음이 적다

  • 리스트, 시퀀스, 이터러블 안에 여러 계층으로 이터러블이 들어있다면 다양하게 언패킹 가능

favorite_snacks = {
    '짭조름한 과자': ('프레즐',100)
    '달콤한 과자': ('쿠키',180),
    '채소': ('당근', 20),
}

((type1, (name1,cals1)),
 (type2, (name2,cals2)),
 (type3, (name3, cals3)))) = favorite_snacks.items()

print(f'제일 좋아하는 {type1}는  {name1}, {cals1}칼로리입니다.')
print(f'제일 좋아하는 {type2}는  {name2}, {cals2}칼로리입니다.')
print(f'제일 좋아하는 {type3}는  {name3}, {cals3}칼로리입니다.')

#결과
제일 좋아하는 쩝조름한 과자 는 프레줄, 100 칼로리입니다. 
제일 좋아하는 달콤한 과자 는 쿠키, 180 칼로리입니다 . 
제일 좋아하는 채소 는 당근, 20 칼로 입니다 .
  • 변수를 지정하지 않고 값을 맞 바꿀 수 있다.
def bubble_sort(a):
    for _ in range(len(a)):
        for i in range(1,len(a)):
            if a[i] < a[i-1]:
                temp = a[i]
                a[i] = a[i-1]
                a[i-1] = temp
names = ['프레즐','당근','쑥갓','베이컨']
bubble_sort(names)
print(names)

#['당근','베이컨','쑥갓','프레즐']
  • 한 줄로 두 인덱스 가리키는 원소를 맞바꿀 수 있다.

def bubble_sort(a):
    for _ in range(len(a)):
        for i in range(1,len(a)):
            if a[i] < a[i-1]:
                a[i-1], a[i] = a[i], a[i-1] #맞바꾸기
names = ['프레즐','당근','쑥갓','베이컨']
bubble_sort(names)
print(names)

#['당근','베이컨','쑥갓','프레즐']
  • for루프 또는 비슷한 다른 요소의 대상인 리스트의 원소를 언패킹

  • 코드가 짧아지고 인덱스를 사용할 이유가 없음

#사용 전
snacks = '베이컨’ , 350), '도넛' , 240), '머핀', 190) l 
for i in range(len (snacks) ) : 
    item = snacks[i] 
    name = 1tem[0 ] 
    calories = item [1] 
    print (f ·#{i+ 1}: {name} 은 {calories} 칼로리입니다 , ' ) 
»>
#1 : 베이컨 은 350 칼로리입니다 
#2: 도넛 은 240 칼로리입니 다 
#3: 머핀 은 190 칼로리입니다 .
#사용 후

for rank, (name, calories) in enumerate(snacks, 1):
    print(f'#{rank}: {name}은 {calories} 칼로리입니다.')

#1 : 베이컨 은 350 칼로리입니다. 
#2: 도넛 은 240 칼로리입니다. 
#3: 핀 은 190 칼로리입니다.
profile
성장을 도울 아카이빙 블로그

0개의 댓글