본문 바로가기

Python/Python Syntax

[Syntax 4] map function & filter function

map function을 설명하기 이전에 값에 2를 곱해주는 함수를 하나 정의해보자.

 

def even_fun(n):
    return n * 2

l = [1,2,3,4,5]

data = [even_fun(l[0]), even_fun(l[1]), even_fun(l[2]), even_fun(l[3]),even_fun(l[4])]
print(data)

우리가 모든 값들을 2배 해주기 위해서는 위 코드와 같이 상당히 길게 적어야 한다. 이러한 경우 map function을 이용하면 더 간결한 코드를 만들 수 있다.

 

  • def 1  map function : map(function, iterable object . . . . .)
list(map(even_fun, l))

동일한 내용을 더 간결하게 사용할 수 있다. 한편, map function의 두번째 인자를 살펴보자. 

두번째 인자는 우리가 [Syntax 3]에서 살펴본 것과 같이 반복문을 이용해 값들을 출력할 수도 있다. 다음 예문을 살펴보라.

data = map(even_fun, l)
for i in data:
    print(i)

마찬가지로 여러개의 인자를 받을 수도 있다. 다음 예제는 2개의 tuple 형식을 합치는 예제이다.

 

def sum_fun(n, k):
    return n + k

l = (2, 5, 8)
m = (3, 3 ,0)

tuple(map(sum_fun, l, m))

 

  • def 2 filter function : filter(function, data)

 

filter function은 글자 그대로 특정한 조건을 만족하는 값들을 걸러내는 함수이다. 다음은 홀수 값을 걸러내는 예제를 살펴보자.

 

def odd_fun(n):
    return n % 2

test_data = [1,2,3,4,5]

print(list(map(odd_fun, test_data)), list(filter(odd_fun, test_data)))

 

이를 출력한 결과를 살펴보면 map 함수를 이용하였을 때는 [1, 0, 1, 0, 1] 이라고 출력되는 것을 알 수 있다. 이는 우리가 정의한 odd_fun의 return 값이 True or False으로 나타나기 때문이다. 반면 filter 함수를 사용한 값은 [1, 3, 5]로 출력되는데 이는 True 결과만 만족되는 값을 출력했기 때문이다.

 

 

Q1. 만약 다음과 같이 코드를 실행하면 어떤결과가 나올지 생각해보라.

def even_fun(n):
    return n * 2

l = [1,2,3,4,5]

#data = [even_fun(l[0]), even_fun(l[1]), even_fun(l[2]), even_fun(l[3]),even_fun(l[4])]
data = even_fun(l)
print(data)

Q2. 다음 코드를 실행해 보고 분석해보라.

test_data = list(range(1, 11))

print(list(filter(lambda x : x % 2 == 0, test_data)), list(filter(lambda x : not(x % 2), test_data)))
print(list(filter(lambda x : x % 3 == 0, test_data)), list(filter(lambda x : not(x % 3), test_data)))
list(filter(lambda x : not(x % 3), list(map(lambda n : n ** 2, test_data))))
list(filter(lambda x : not(x % 3), map(lambda n : n ** 2, test_data)))