이것도 알아야 하네?
[Python] Python답게 코딩하기 — Lambda, filter, reduce 와 map 본문
사용할 일은 자주 있지만, 그럴 때마다 항상 찾아보면서 사용하는 기능들 — Lambda, filter, reduce, and map
해당 기능들은 Python에서 짧고 간결한 코드로 작성할 수 있도록 도움을 제공합니다.
더이상 찾지않아도 되도록 오늘 외우기 위해 정리해봅니다,,
■ lambda
lambda 함수는 간단하게 생각하면 복잡하지 않은 함수를 생성할 수 있는 기능을 제공하며 함수를 이름없이 사용할 수도 있습니다. 주로 한 번 사용을 위해 사용되며, 앞에서 언급된 다른 함수들 — filter, reduce, map들과 함께 사용되며, 복잡하지 않은 함수를 생성하기 때문에 syntax는 비교적 간단합니다.
syntax
lambda [argument_list]: [연산] |
예시
sqrt = lambda x:x**2
sqrt(3) # Output: 9
위의 코드를 lambda 함수를 사용하지 않고 표현하려면 아래와 같이 선언하여서 사용해야합니다.
def sqrt(x):
return x**2
만약, argument가 하나 이상일 때는 아래와 같이 ,(comma)로 나열해주면 됩니다.
sum = lambda x, y : x + y
sum(3,4) # Output: 7
■ filter
이름에서 짐작할 수 있듯이 주어진 sequence에서 특정 조건을 만족하는 원소들만을 남기기는 기능을 제공해줍니다.
syntax
filter(함수, [sequence]) |
함수를 filter 첫 번째 argument로 넣고 해당 함수의 return 값은 boolean 타입(True or False)이어야 합니다. 이 때, 오직 return 값이 True인 원소들만 남겨지게 됩니다.
예시
func = lambda x:x>3
numbers = range(10)
result = list(filter(func, numbers)) # [4, 5, 6, 7, 8, 9]
result = list(filter(lambda x:x>3, range(10))) # [4, 5, 6, 7, 8, 9]
위의 코드에서 range(10)은 0부터 9까지의 숫자 수열이고, 함수를 True값으로 만드는 4부터 result에 남게 됩니다.
result = list(filter(lambda x:x>3, range(10))) 처럼 작성할 경우 lambda의 이름을 지정하지 않았기 때문에 재사용은 불가합니다.
■ reduce
reduce()는 filter()처럼 수열에 함수를 적용하는거긴하나 결과는 하나의 값으로 반환됩니다. 수열 중 가장 큰 수를 찾거나 수열에 있는 모든 수를 이용하여 계산을 할 경우에 사용할 수 있습니다. 확장성이 높지 않기 때문에 다른 기능에 비해서 사용성이 떨어지기는 합니다.
syntax
reduce(함수, [seqeunce]) |
예시
from functools import reduce
reduce(lambda a,b: a if a > b else b, [1,4,5,6,8,5,2]) # 8
reduce(lambda x, y: x+y, range(1,101)) # 5050
reduce()는 수열에 존재하는 값에 순서대로 적용되기 때문에 reduce(lambda x, y: x+y, range(1,101))의 경우, range(1,101)는 [1,2,3,...,100]이며 1,2를 x, y 생각하고 3으로 결과를 내고 다시, 해당 값과 수열에서 2 다음 수인 3과 더해서 6 이런식으로 동작합니다.
'프로그래밍 > 데이터 분석' 카테고리의 다른 글
[Python] csv 파일을 읽는 다양한 방법 (0) | 2021.11.19 |
---|---|
[자격증 후기] 2020 정보처리기사 과정 정리 및 합격 수기 (0) | 2021.11.19 |
[개념 정리] 클래스 불균형 데이터 처리 문제점과 중요 지표 (0) | 2021.11.09 |