람다 함수는 이름이 없는 함수로,
def를 사용하지 않고 한 번만 함수를 사용하거나 함수를 인자로 받을 때 유용하게 사용할 수 있다
# 1.기본 표현구문
lambda 매개변수 : 표현식
--------------------------------------------------------------------
#2.이해하기
들어온 값에 2를 곱해서 반환한다고 하면 lambda x : x * 2
--------------------------------------------------------------------
#3.기존 함수 작성방식과 비교하기
#두 수를 더하는 함수 - def 형식
def plus(a,b):
return a+b
plus(10,40)
>> 50
#두 수를 더하는 함수 - 람다 형식
(lambda a,b: a + b)(10, 40)
filter() 함수는 여러 데이터를 갖고 있는 자료형(리스트, 튜플 등)에서 일부 데이터만 추려낼 때 사용한다
말 그대로, 필터를 걸어서 'True인 경우에만 남기고, False인 경우에는 제거'하는 것
filter(조건 함수, 순회 가능한 데이터)
말하자면, for문 0번 인덱스 값부터 돌리듯이 "순회 가능한 데이터"를 "조건 함수"로 돌려서 그 결과에 부합하는 것만 취하는 방식이다
map() 함수는 리스트의 원소들을 하나씩 꺼내서 함수를 적용한 뒤, 그 결과를 새로운 리스트에 담아주는 기능을 한다.
list(map(lambda x: x ** 2, range(5)))
# >>> [0, 1, 4, 9, 16]
range(5) == [0, 1, 2, 3, 4]
이 각각의 x값들에 대해 제곱(<- 함수)을 하고, 그 결과를 새로운 리스트에 담아주는 것이다.
이를 응용하면 아래와 같은 짓도 할 수 있다 (?)
hour_section = list(map(lambda x: '아침' if((5 <= x) and (x < 12)) \
else ('낮' if((12 <= x) and (x < 18)) \
else ('오후' if((18 <= x) and (x < 24)) \
else '밤')), df3['Dep_Hour']))
예시 문제를 보자면 이렇다.
users = [
{'mail': 'gregorythomas@gmail.com', 'name': 'Brett Holland', 'gender': 'M'}
,{'mail': 'hintoncynthia@hotmail.com', 'name': 'Madison Martinez', 'gender': 'F'}
,{'mail': 'wwagner@gmail.com', 'name': 'Michael Jenkins', 'gender': 'M'}
,{'mail': 'daniel79@gmail.com', 'name': 'Karen Rodriguez', 'gender': 'F'}
,{'mail': 'ujackson@gmail.com', 'name': 'Amber Rhodes', 'gender': 'F'}
]
# for문을 사용하는 방식
for u in users:
m_list = list()
if u['gender'] == 'F':
m_list.append(u)
return m_list
# 람다 함수를 사용하는 방식
m_list = list()
for u in filter(lambda x: x['gender'] == 'F', users):
m_list.append(u)
(출처)
또한, sorted 등의 key 속성과 연계하여 람다 함수를 활용해볼 수 있다.
# lambda 함수를 이용한 홀수 출력하기
mylist = [1, 2, 3, 4, 5]
mylist2 = list(filter(lambda x: x % 2 == 1, mylist))
# filter(조건 함수, 순회 가능한 데이터)
print(mylist2)
# >> [1, 3, 5]
# lambda 함수를 이용한 정렬
mylist = ['apple', 'banana', 'cherry']
mylist2 = sorted(mylist, key=lambda x: len(x))
# sorted는 기본적으로 오름차순, reverse=True 사용 가능
# len(x)를 key(기준)로 mylist를 정렬하는 함수
print(mylist2)
# ['apple', 'banana', 'cherry']