- [BW 13] 슬라이싱보다는 나머지를 모두 잡아내는 언패킹을 사용하라2024년 10월 22일
- 31514
- 작성자
- 2024.10.22.:11
아래와 같은 코드는 ages의 요소가 추가되거나 삭제되었지만, 다른 줄에서 깜빡하고 수정하지 않으면 의도하지 않은 결과를 초래할 수 있다.
ages = [20, 19, 18, 17, 16, 15, 14, 13] oldest, second_oldest, others = ages[0], ages[1], ages[2:] print(oldest, second_oldest, others) >>> 20 19 [18, 17, 16, 15, 14, 13]
따라서 별표 식을 사용해 모든 값을 담는 언패킹을 사용하면 좋다.
ages = [20, 19, 18, 17, 16, 15, 14, 13] oldest, second_oldest, *others = ages print(oldest, second_oldest, others) >>> 20 19 [18, 17, 16, 15, 14, 13]
하지만 다음과 같은 조건에서는 별표 식 언패킹을 사용할 수 없다.
ages = [20, 19, 18, 17, 16, 15, 14, 13] # 별표 식만 있을 때 *others = ages # 별표 식이 두 개 이상 사용할 때 first, *middle, *second_middle, last = ages
여러 계층으로 이뤄진 구조를 언패킹할 때는 서로 다른 부분에 포함되는 한, 별표 식을 여럿 사용해도 된다.
car_inventory = { '시내' : ('그랜저', '아반떼', '티코'), '공항' : ('제네시스 쿠페', '소나타', 'K5', '엑센트'), } ((loc1, (best1, *rest1)), (loc2, (best2, *rest2))) = car_inventory.items() print(f'{loc1} 최고는 {best1}, 나머지는 {len(rest1)} 종') print(f'{loc2} 최고는 {best2}, 나머지는 {len(rest2)} 종') >>> 시내 최고는 그랜저, 나머지는 2 종 공항 최고는 제네시스 쿠페, 나머지는 3 종
만약 언패킹하는 시퀀스에 남는 원소가 없다면 빈 리스트를 반환한다.
arr = [1, 2] first, second, *rest = arr print(first, second, rest) >>> 1 2 []
하지만 별표 식은 항상 리스트를 만들어내기 때문에 언패킹하는 데이터가 클 경우 컴퓨터 메모리를 모두 사용할 수 있다.
'Book > 파이썬 코딩의 기술' 카테고리의 다른 글
[BW 18] __missing__을 사용해 키에 따라 다른 디폴트 값을 생성하는 방법 (0) 2024.10.22 [BW 14] 복잡한 기준을 사용해 정렬할 때는 key 파라미터를 사용하라 (1) 2024.10.22 [BW 12] 스트라이드와 슬라이스를 한 식에 함께 사용하지 말라 (0) 2024.10.22 [BW 11] 시퀀스를 슬라이싱하는 방법을 익혀라 (0) 2024.10.22 [BW 10] 대입식을 사용해 반복을 피하라 (0) 2024.10.22 다음글이전글이전 글이 없습니다.댓글
스킨 업데이트 안내
현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)