슬라이싱보다는 나머지를 모두 잡아내는 언패킹을 사용하라#13

김주현·2021년 6월 29일
0

언패킹:패킹된 변수안의 값을 여러개의 변수값을 나눔
패킹:간단하게 변수하나에 여러개의 값을 담는 것

ex1) 자동차들이 출고 이후 몇년 지났는지 표현하는 리스트가 있다. 언패킹으로 진행해보자(가장 오래된 자동차, 두번째로 오래된 자동차)

car_ages = [0,9,3,8,7,20,19,1,6,15]
car_ages_descending = sorted(car_ages,reverse=True) #sorted(정렬),reverse=True(내림차순),False(오름차순)

oldest = car_ages_descending[0] 
second_oldest= car_ages_descending[1]
others = car_ages_descending[2:]
print(oldest,second_oldest,others)

20 19 [15, 9, 8, 7, 6, 3, 1, 0]

:)원하는 값이 출력이 되었지만 여러 하위집합이 발생하게 되어 가독성이 떨어지고,실수가 발생할 수 있음 

이를 위해 별표 식(*)을 이용해야 함

car_ages = [0,9,3,8,7,20,19,1,6,15]
car_ages_descending = sorted(car_ages,reverse=True) #sorted(정렬),reverse=True(내림차순),False(오름차순)

oldest, second_oldest, *others = car_ages_descending
print(oldest,second_oldest,others)

20 19 [15, 9, 8, 7, 6, 3, 1, 0]

:)가독성이 좋아지고, 인덱스의 경계가 사라지므로 오류발생률이 줄어듬

ex1-1 별표식을 다른 위치에도 쓰일 수 있음

*others,second_youngest,youngest = car_ages_descending. #20,19,15,9,8,7,6,3 먼저 출력 이후 1,0 출력
print(youngest,second_youngest,others) 

0 1 [20, 19, 15, 9, 8, 7, 6, 3]

*별표식을 포함한 변수가 꼭 있어야함, 별표 식이 두개 이상 쓸 수 없음

ex2) car_inventory

car_inventory = { '시내':('그랜저','아반떼','티코'),'공항':('제네시스쿠페','소나타','k5','엑센트')}
((loc1,(best1,*rest1)),(loc2,(best2,*rest2))) = car_inventory.items() #dict 메서드 items 딕셔너리 키,값들을 불러옴
print(f'{loc1} 최고는 {best1},나머지는 {len(rest1)} 종') # loc1 =0 , best1 =1 , rest1= 나머지 수
print(f'{loc2} 최고는 {best2},나머지는 {len(rest2)} 종')

시내 최고는 그랜저,나머지는 2 종
공항 최고는 제네시스쿠페,나머지는 3

언패킹 대입에 별표 식을 사용하면 언패킹 패턴에서 대입되지 않는 모든 부분을 리스트에 잡아낼 수 있다

profile
잼민이개발자

0개의 댓글