실전 오류 해결 팁/Python

[Python] 패킹과 언패킹

이우열 2023. 4. 11. 22:51
728x90

✅ 패킹

여러 개의 데이터를 하나로 묶어 변수에 대입하는 것
nums = (1, 2, 3, 4, 5)

 

 언패킹

여러 개의 데이터를 하나로 묶은 컬렉션을 여러 개의 변수로 나누어 담는 것
(a, b, c, d, e) = nums

print(a, b, c, d, e)
# 1 2 3 4 5

 

 남은 요소 대입받기

좌변의 변수 중 하나의 변수에 별 기호( * : Asterisk)를 붙이면 남은 요소 전체를 리스트에 담아 대입한다.

 

✏️ 슬라이싱으로 분리

a = nums[0]
b = nums[1]
arr = nums[2:]

print(a, b, arr)
# 1 2 (3, 4, 5)

 

✏️ 별 기호( * : Asterisk)

a, b, *arr = nums

print(a, b, arr)
# 1 2 [3, 4, 5]
*arr, a, b = nums

print(arr, a, b)
# [1, 2, 3] 4 5
a, *arr, b = nums

print(a, arr, b)
# 1 [2, 3, 4] 5

 


✅ 응용

 

알고리즘 문제를 풀다보면

n을 입력받고 바로 뒤에 n개의 값을 입력받을 때가 있다.

 

이는 파이썬이 아닌 다른 언어에서 미리 배열의 크기를 선언해주어야 할 때 필요하기 때문에

주어지는 입력 조건이지만 파이썬은 크기와 상관없이 리스트를 만들 수 있어 사실 크게 필요하지 않은 입력 조건이다.

 

이를 위에 정리한 패킹을 통해 쉽게 변수에 담아보자.

 

 

✏️ 주어지는 입력 조건

n개의 학생이 있고, n명의 학생의 시험 점수가 있다.

n명의 학생의 평균 점수를 구해보자.

 

입력은 n과 학생의 점수 n개가 연속하여 입력된다.

# 예제) 3명의 학생이 각각 70점, 80점, 90점을 받았다.
# input : 3 70 80 90

n, *scores = list(map(int, input().split()))

print(sum(scores) / n)
# 80.0

 

평소에 했던 방식은 슬라이싱을 사용했었다.

arr = list(map(int, input().split()))

n = arr[0]
scores = arr[1:]

print(sum(scores) / n)

 

패킹을 사용해서 조금 더 파이써닉하게 해결하면 3줄의 코드를 1줄의 코드로 바꿀 수 있기 때문에 유용하게 사용할 수 있을 것 같다.

728x90

'실전 오류 해결 팁 > Python' 카테고리의 다른 글

[Python] 소수점 자릿수 제한법  (0) 2023.04.14