문제 설명
정수를 담고 있는 배열 arr의 평균값을 return 하는 함수, solution을 완성해보세요.
제한사항
- arr은 길이 1 이상, 100 이하인 배열입니다.
- arr의 원소는 -10,000 이상 10,000 이하인 정수입니다.
입출력 예
arr | return |
[1,2,3,4] | 2.5 |
[5,5] | 5 |
✅SOL_1
1
2
|
def solution(arr):
return sum(arr)/len(arr)
|
cs |
정말 간단한 코드이다. 필요할 때 사용할 수 있는 함수가 많을수록 코드를 더 쉽게 작성할 수 있다. sum함수를 몰랐다면 for문을 이용하여 arr의 인덱스에 하나하나 접근해서 데이터를 모두 더해야 했을 것이다. 아무튼 모든 리스트의 합을 구하는 sum함수를 제때 사용하여 리스트의 길이를 구해주는 함수 len으로 나누어 리스트에 있는 데이터들의 평균을 구할 수 있다.
✅SOL_2
1
2
3
|
from functools import reduce
def solution(arr):
return reduce(lambda x, y : x + y, arr) / len(arr)
|
cs |
reduce와 lambda를 통해 sum함수를 대체할 수 있다. reduce는 functools모듈 내에 정의되어있어 따로 < from functools import reduce > 하여 import해주어야 한다.
reduce(funtion, list, initial)
reduce는 위와 같이 사용할 수 있다. reduce는 initial값부터 시작하여 list의 값 2개를 가져와 function에 적용하여 1개의 값으로 만들어 저장한다. 그다음은 function에 적용된 값과 list의 다음 값을 가져와 또 function에 적용하여 1개의 값으로 축약한다. 이 과정을 반복하여 list의 값들을 한 개의 값을 축약한다. 이때 initial값이 작성되어있지 않으면 list의 첫 번째 데이터로 대체한다.
lambda는 reduce의 function 부분에 쓰이는데 function을 따로 정의하여 가져오지 않아도 간단한 함수를 적용할 수 있다. 문제에 필요한 x+y같이 간단한 수식은 따로 함수를 만드는 것이 더 번거롭기 때문에 lambda를 사용한다.
lambda x, y : x + y
lambda는 위와 같이 사용한다. x, y와 같은 파라미터는 2개 이상으로 제한없이 작성하고, 콜론(:) 뒤의 표현식에는 앞에 작성한 파라미터가 모두 들어간 식이 와야 한다.
lambda a, b, c : (a + b) * c
따라서 위 SOL_2의 코드는 reduce를 사용하여 arr에 있는 값을 모두 합하는 lambda를 사용하였고, reduce함수의 결과값을 len(arr)로 나누어 평균을 구하였다.
'Python 공부기록' 카테고리의 다른 글
Python _ 짝수와 홀수 (1) | 2021.03.04 |
---|---|
Python _ 콜라츠 추측 (9) | 2021.03.03 |
Python _ 행렬의 덧셈 (2) | 2021.02.26 |
Python _ 핸드폰 번호 가리기 (0) | 2021.02.25 |
Python _ x만큼 간격이 있는 n개의 숫자 (0) | 2021.02.24 |