본문 바로가기

프로그래머/Python

[윤성우의 열혈 파이썬 중급편] 07. map & filter

출처 : 윤성우의 열혈 파이썬 : 중급

07. map & filter

map

def pow(n)
    return n ** 2

st1 = [1, 2, 3]
st2 = [pow(st1[0]), pow(st1[1]), pow(st1h[2])]
print(st2)      # [1, 4, 9]

st1 = [1, 2, 3]
st2 = list(map(pow, st1))
print(st2)      # [1, 4, 9]
  • map 함수는 st1에 저장된 값들을 하나씩 전달하면서 pow 함수를 호출해준다
  • 이 때 map의 두 번째 전달 대상은 iterable 객체여야 한다
  • map은 iterator 객체 하나를 반환한다
def pow(n)
    return n ** 2

st = [1, 2, 3]
ir = map(pow, st)
for i in ir:
    print(i, end = ' ')     # 1 4 9

def dbl(e):
    return e * 2

list(map(dbl, (1, 3, 4)))   # [2, 6, 8]
list(map(dbl, 'hello'))     # ['hh', 'ee', 'll', 'll', 'oo']
  • iterable 객체이면 무엇이든 전달 가능
def sum(n1, n2):
    return n1 + n2

st1 = [1, 2, 3]
st2 = [3, 2, 1]
st3 = list(map(sum, st1, st2))
print(st3)      # [4, 4, 4]
  • sum은 매개변수가 둘이므로 map은 두 개의 iterable 객체를 요구한다

map과 람다

def rev(s):
    return s[::-1]

st = ['one', 'two', 'three']
rst = list(map(rev, st))
print(rst)      # ['eno', 'owt', 'eerht']

rst = list(map(lambda s: s[::-1], st))
print(rst)      # 동일

filter

def is_odd(n):
    return n % 2

st = [1, 2, 3, 4, 5]
ost = list(filter(is_odd, st))
print(ost)      # [1, 3, 5]
  • filter 함수의 첫 번째 인자는 True 또는 False를 반환하는 함수이어야 한다
  • 두 번째 인자는 값을 저장하고 있는 iterable 객체이어야 한다

filter & lambda

st = [1, 2, 3, 4, 5]
ost = list(filter(lambda: n % 2, st))
print(ost)      # [1, 3, 5]

st = list(range(1, 11))
fst = list(filter(lambda n: not(n % 3), st))
print(fst)      # [3, 6, 9]

st = list(range(1, 11))
fst = list(filter(lambda n: not(n % 3), map(lambda n: n**2, st)))
print(fst)      # [9, 36, 81]