이것도 알아야 하네?

[Python] Python답게 코딩하기 — Lambda, filter, reduce 와 map 본문

프로그래밍/데이터 분석

[Python] Python답게 코딩하기 — Lambda, filter, reduce 와 map

아직 갈 길이 먼 사람 2022. 2. 15. 23:49
728x90

사용할 일은 자주 있지만, 그럴 때마다 항상 찾아보면서 사용하는 기능들 — 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 이런식으로 동작합니다. 

 

728x90
Comments