[Python] map, filter 함수

2022. 12. 7. 22:35

 

map 함수와 filter 함수에 대해 알아보자.

 

map

 

map 함수가 받는 인자를 보면 함수반복 가능한 객체이다.

map함수는 반복 가능한 객체를 받아 함수에 적용해준다.

 

 

예시 코드를 만들어보자.

li = [1, 2, 3]
a = map(lambda x : x+1, li)

print(type(a))
print(list(a))

간단한 예시를 위해 lambda함수를 사용했다. 

재사용하는 함수를 따로 만든 후 적용해도 된다.

 

※ map함수의 출력 type은 class 이기 때문에  list로 감싼 후 출력해야 한다.

 

filter

 

 

filter 함수의 첫번째 인자는 함수 또는 None, 두번째 인자는 반복 가능한 객체이다.

map 함수와 비슷하게 반복 가능한 객체를 함수에 적용한다.

그 후 결과가 참일 경우 값을 반환한다.

첫번째 인자가 None일 경우, 반복 가능한 객체의 각 요소가 참인지는 판단한다.

 

 

예제 코드를 만들어보자.

li = ['가', 1, '나', 2]

def isStr(li):
    if str(type(li)) == "<class 'str'>":
        return True
    return False

result = filter(isStr, li)

print(type(result))
print(list(result))

리스트 각 요소의 타입이 str이면 True를 반환하는 isStr함수를 만들었다.

 

filter의 두번째 인자가 반복 가능한 객체를 받기 때문에 isStr함수 내에서 for문을 통해 list의 각 요소를 꺼내오는 작업을 하지 않았다.

 

또한 map 함수와 마찬가지로

※ filter 함수의 출력 type은 class 이므로 list로 감싼 후 출력해야 한다.

 

filter + map

 

filter 함수의 두번째 인자로 map함수를 넣어보자.

 

li = [9.4, 9.8, 12.3]

result = list(filter(lambda x : x>=10, map(round, li)))
print(result)

 

filter함수의 첫번째 인자로 lambda 함수를 넣고, 두번째 인자로 map 함수를 넣었다.

map함수는 li의 각 요소를 반올림해주는 round 함수를 사용했다.

결과는 list로 반환했다.