오늘 정리할 내용은 함수의 축약형으로 사용하는 lambda function과 list에서 filter 역할을 할 때 자주 사용하는 filter function을 정리하려고 한다. lambda 함수는 자주 쓰는 편이지만, filter function은 자주 사용하지 않았는데 생각보다 유용해서 기록을 해두려고 한다.
lambda function
우선 간단한 함수를 만들고 둘을 비교해 보자.
def square(num):
return num**2
print(square(3))
square = lambda num: num**2
print(square(3))
우선 num을 인수로 받아서 제곱하는 함수를 만들었다.
def로 시작하는 함수를 아래쪽에서는 lambda expression을 통해서 축약된 형태로 표현했다.
lambda 함수는 lambda arguments: expression의 형태로 작성을 하면 된다.
함수를 간단하게 표현하는 것이기에 어려운 내용은 없다.
lambda expression의 사용처: map
lambda 함수는 apply method나 map을 사용할 때 유용하다.
참고로 map에 관해서는 며칠 전에 다룬 적이 있다.
2023.07.19 - [Pyhon 기초, 실전] - [Python 기초] map: 아는 사람만 쓰는 built-in function
다음은 1부터 5까지의 숫자를 세제곱 해서 리스트로 담는 코드이다.
# 일반적인 def 사용
def my_func(num):
return num**3
print(list(map(my_func, range(1, 6))))
# lambda expression 사용
print(list(map(lambda x: x**3, range(1, 6))))
[1, 8, 27, 64, 125]
[1, 8, 27, 64, 125]
하나는 def를 사용했고, 밑에서는 lambda expression을 사용했다.
함수의 축약된 형태일 뿐이기에, 저런 식으로 함수를 넣을 자리에 사용할 수 있다.
혹은 함수 자체를 정의해서 바로 사용할 수도 있지만, 빈도가 높지는 않다.
아래가 그 예시다.
(lambda x: x**3)(5)
125
filter function
filter function은 주로 list에서 내가 원하는 조건에 해당하는 값만을 추출할 때 사용한다.
예를 들어서, 1부터 100까지 담겨 있는 list 중에서 3의 배수만 취하고 싶다면 어떤 코드를 짤 수 있을까?
아마 for문을 돌리면서 3의 배수인지 검사해서 담게 될 것이다. 아래처럼.
multiple_of_three = []
for i in range(1, 101):
if i % 3 == 0:
multiple_of_three.append(i)
print(multiple_of_three)
[3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48, 51, 54, 57, 60, 63, 66, 69, 72, 75, 78, 81, 84, 87, 90, 93, 96, 99]
이럴 때 filter function을 사용하면 코드를 간결하게 작성할 수 있다.
filter 함수는 filter(function, target) 형태로 작성하면 된다.
def multiple_chk(num):
return num % 3 == 0
multiple_of_three = list(filter(multiple_chk, range(1, 101)))
print(multiple_of_three)
우선 3의 배수인지를 검사하는 함수를 정의하고, filter 함수에 대입하였다.
그러면 함수의 return 값이 True에 해당하는 element들만 list에 담게 된다.
[3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48, 51, 54, 57, 60, 63, 66, 69, 72, 75, 78, 81, 84, 87, 90, 93, 96, 99]
이제 앞서 배운 lambda expression을 이용하면 코드를 더 간결하게 작성할 수 있다.
multiple_of_three = list(filter(lambda num: num % 3 == 0, range(1, 101)))
print(multiple_of_three)
결과는 물론 같다.
list comprehension, map, filter, lambda 이렇게 4개는 list를 다루는 데에 있어서 필수적인 함수인 것 같다. 정리하기를 잘했다. 활용도가 매우 높다. 끝!
'Pyhon 기초, 실전' 카테고리의 다른 글
[Python 기초] collections module 소개: counter, namedtuple, defaultdict (0) | 2023.07.23 |
---|---|
[Python 기초] Generator의 뜻과 사용 예시 (0) | 2023.07.22 |
[Python 기초] map: 아는 사람만 쓰는 built-in function (0) | 2023.07.19 |
[Python 기초] 날짜 및 시간 다루기: datetime module 소개 (0) | 2023.07.18 |
[Python 기초] list, dictionary comprehension and conditional comprehension (1) | 2023.07.17 |