[Python] lambda 함수와 filter(), map()

양승우·2024년 10월 25일

Python

목록 보기
10/16

lambda 함수

람다 함수는 이름이 없는 함수로,
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()

filter() 함수는 여러 데이터를 갖고 있는 자료형(리스트, 튜플 등)에서 일부 데이터만 추려낼 때 사용한다
말 그대로, 필터를 걸어서 'True인 경우에만 남기고, False인 경우에는 제거'하는 것

filter(조건 함수, 순회 가능한 데이터)

말하자면, for문 0번 인덱스 값부터 돌리듯이 "순회 가능한 데이터"를 "조건 함수"로 돌려서 그 결과에 부합하는 것만 취하는 방식이다

map()

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']))

응용

예시 문제를 보자면 이렇다.

for문과 람다 함수의 연계

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 속성과 연계

또한, 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']
profile
어제보다 오늘 더

0개의 댓글