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)))
'Python > Python Syntax' 카테고리의 다른 글
[Syntax 3] iter function & method(반복자 함수와 메소드) (0) | 2020.02.07 |
---|---|
[Syntax 2] List comprehension (리스트 축약) (1) | 2020.02.07 |
[Syntax 1] Shallow copy & deep copy[얕은 복사 & 깊은복사] (0) | 2020.02.07 |