티스토리 뷰

Development/Python

[Python] lambda, map, filter

KimDoubleB 2021. 1. 23. 00:01
반응형

python의 매력인 lambda, map, filter에 대해 배워보고 다뤄봅시다 !


lambda

표현

lambda arguments : expression

설명

lambda는 파이썬에서 사용되는 익명함수입니다. 기존 함수보다 메모리를 절약하며, 가독성을 향상시킨다는 장점이 있습니다.

예제

add = lambda x, y: x+y
print(add(4, 9)) # 13

even = lambda x: True if x % 2 == 0 else False
print(even(2)) # True
print(even(3)) # False
print([even(a) for a in range(1, 6)]) # [False, True, False, True, False]

# 위와 같지만 할당을 안한 경우
print((lambda x, y: x+y)(4, 9)) # 13

print((lambda x: True if x%2 == 0 else False)(2)) # True
print((lambda x: True if x%2 == 0 else False)(3)) # False

map

표현

map(function_object, iterable1, iterable2,...)

설명

map은 python의 내장함수로써, iterable(list, dictionary 등)의 모든 인자에 대해 function을 수행한 뒤 map iterator 객체로 반환합니다.

예제

def add10(x):
    return x + 10

vals = map(add10, [1, 2, 3, 4]) 
print(type(vals)) # <class 'map'>

# next를 통해 접근 --> pop 같은 것. 나오면서 삭제된다.
print(next(vals)) # 11
print(next(vals)) # 12
print(next(vals)) # 13
print(next(vals)) # 14

# list로 변환 후 사용
vals = map(add10, [1, 2, 3, 4]) 
print(list(vals)) # [11, 12, 13, 14]

# lambda와 잘 사용된다.
list(map(lambda x: x+10, [1, 2, 3, 4])) # [11, 12, 13, 14]
list(map(lambda x: True if x%2 == 0 else False, [x for x in range(1, 11)])) # [False, True, False, True ... ]

# dict 활용
people = [{'name':'AAA', 'age':25}, {'name':'BBB', 'age':41}, {'name':'CCC', 'age':38}]
list(map(lambda x: x['age'], people)) # [25,41,38]
list(map(lambda x: x['name'] + '님', people)) # ['AAA님', 'BBB님', 'CCC님']

# 여러 iterable를 활용할 수 있다.
l1 = [1, 2, 3, 4]
l2 = [10, 20, 30, 40]
list(map(lambda x, y: x+y, l1, l2)) # [11, 22, 33, 44]

# bmi 계산 예제
height = [171, 183, 162, 193]
weight = [63, 77, 61, 101]
bmi = list(map(lambda x, y: y/(x/100)**2, height, weight))

filter

표현

filter(function_object, iterable)

설명

filter도 내장함수로써, 2개의 인자를 받는다. function_object는 boolean 값을 리턴하는 함수이다. filter는 iterable의 인자들에서 function_object의 조건에 true를 반환하는 값만을 담는다. 전체적인 사용법은 map과 매우 유사하다.

예제

l1 = [x for x in range(1, 51)] # [1, 2, 3, 4, 5 ... 48, 49, 50]
even = filter(lambda x: x%2 == 0, l1) 

print(type(even)) # <class 'filter'>

print(next(even)) # 2
print(next(even)) # 4

even = filter(lambda x: x%2 == 0, l1) 
print(list(even)) # [2, 4, 6, 8, 10 ... 46, 48, 50]

# dict 활용
people = [{'name':'AAA', 'sex':'male'}, {'name':'BBB', 'sex':'female'}, {'name':'CCC', 'sex':'male'}]
list(filter(lambda x: x['sex'] == 'female', people)) # [{'name': 'BBB', 'sex': 'female'}]
320x100
반응형
댓글
반응형
250x250
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함