취준일기

파이썬 내장함수 lambda, filter, map 정리

둉영 2020. 5. 5. 12:20

 

lambda


def와 같이 함수를 생성할 때 사용되는 예약어로 def보다 짧게 작성이 가능합니다.

def 를 쓸 수 없는 구조거나 복잡하지 않은 구조에 lambda를 사용하여 함수를 정의합니다.

 

>>> mul = lambda a,b: a*b
>>> mul(2,3)
6
>>> def mul(a,b):
	return a*b

>>> mul(2,3)
6

def 가 아닌 lambda함수를 사용하는 이유는 일시적인 함수로 필요한 곳에서 사용하고 바로 버릴 수 있습니다. 함수의 이름이 따로 정해줄 필요가 없으며 익명 함수 입니다. 

return 문이 필요하지 않고 반환값을 만드는 표현식을 통해 정의합니다. 

 

def 안에서 lambda 함수를 함께 사용하면서 여러개의 증분 함수를 만들어 독립적으로 사용할 수  도 있습니다.

>>> def inc(a)
	return lambda x, a : x*a
    
>>> inc(3)(10)
30
    
>>> k = inc(2)
>>> g = inc(3)

>>> print(k(3))
6
>>> print(g(3))
9

filter 함수


 

리스트에 들어있는 원소들을 함수에 적용시켜 결과가 참인 값들만 새로운 리스트로 다시 만들어 줍니다.

반환값은 boolean 값으로 출력하는 데 True 값은 반환, False 값은 제거합니다.

우리가 아는 필터라는 뜻은 무언가를 정제하거나 걸러낸다는 건데 파이썬에서의 filter도 이러한 의미에서 유사하다고 볼 수 있습니다. 

 

>>> list(filter(lambda x:x>0,[1,-3,2,0,-5,6]))
[1,2,6]
>>> def positive_num(x):
    	return x>0

>>> list(filter(positive_num,[1,-3,2,0,-5,6]))
[1,2,6]

위의 두 예시는 양수를 구하는 함수를 lambda 와 def를 이용하여 정의한 뒤 filter를 이용해서 걸러낸 결과입니다.

 

filter 함수를 list 함수로 감싸지 않으면 아래와 같이 결과값이 뜨기 때문에 list로 감싸주어야 합니다.

왜 그런지는 저도 잘 모르겠습니다. 혹시 아시는 분 계시면 댓글남겨주시면 함께 공부할 수 있을 것 같습니다. 🙂

-> 파이썬 버전에 따라 다른 듯 한데 파이썬 3 이상이신 분들은 list로 감싸줘야 할 듯 합니다. map함수도 마찬가지

 


map 함수


map 함수도 filter 함수와 마찬가지로 함수와 리스트를 인자로 받습니다. map 함수는 매핑한다는 말처럼 리스트로 부터 각 원소를 함수에 대입하여 그 결과를 새로운 리스트로 반환해주는 함수입니다. 

>>> list(map(lambda x: x*2, range(5)))
[0,2,4,6,8]
>>> def mul(x):
    return x*2

>>> list(map(mul, range(5)))
[0,2,4,6,8]