본문 바로가기

Study/FastCampus

[python] map(), filter(), reduce() 구현

728x90
반응형

이전 포스팅에서 map()에 대해 간략히 포스팅한 적이 있다. map() 뿐만 아니라 Filter() 에 대한 설명도 같이 있으니, 동작원리에 대해 알고 싶다면 아래 링크를 참고하길 바랍니다.

https://ssanggo.tistory.com/63

 

[python] Map(), Filter()

map() : 반복가능한 iterable 객체를 받아서, 각 요소에 함수를 적용해 주는 함수 filter() : 특정 조건으로 걸러서 걸러진 요소들로 iterator 객체를 만들어서 리턴해주는 함수 [ Map()와 Filter() 작동원리 ]

ssanggo.tistory.com

 


 

Quiz 1

map()를 map_func 함수의 이름으로 구현하세요.

리스트의 데이터를 아래의 예제와 같이 더하는 함수를 만드는데 따로 함수를 선언해서 사용하지 말고, map의 첫번째 파라미터에 lambda 함수로 구현하세요.

 

ls1 = [1, 2, 3, 4]
ls2 = [5, 6, 7]
ls3 = [9, 10, 11, 12]

 

result = [15, 18, 21]

 

def map_func(func, *args):
	return [func(*datas) for datas in zip(*args)]
print(map_func(lambda *args : sum(args), ls1, ls2, ls3))

# 출력결과
[15, 18, 21]

# 실제 map() 함수의 결과와 비교
print(list(map(lambda *args : sum(args), ls1, ls2, ls3)))

# 출력결과
[15, 18, 21]

 

Quiz 2

filter()를 filter_func 함수의 이름으로 구현하세요.

filter 함수를 구현하여 1~10까지 숫자에서 홀수만 출력하는 코드를 작성하세요

 

ls = range(1, 10)

 

result = [1, 3, 5, 7, 9]

 

def filter_func(func, datas):
    return [data for data in datas if func(data)]
print(filter_func(lambda number: number % 2, ls))

# 출력결과
[1,3,5,7,9]

# 실제 filter 함수와 결과비교
print(list(filter(lambda number: number % 2, ls)))

# 출력결과
[1,3,5,7,9]

 

Quiz 3

 

reduce()를 reduce_func 함수의 이름으로 구현하세요

 

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

reduce(lambda x, y: x+y, ls)

 

def reduce_func(func, ls):
    result = ls[0]
    del ls[0]
    for data in ls:
        result = func(result, data)
    return result
ls = [1,2,3,4,5]

print(reduce_func(lambda x, y: x + y, ls))

# 출력결과
15

# 기존 reduce 함수와 결과 비교
print(reduce(lambda x, y: x + y, ls))

# 출력결과
15
728x90
반응형