카테고리 없음

filter( ) 함수, map( ) 함수

1space 2024. 7. 25. 16:37

두 함수를 보기전에 콜백 함수라는 것이 있습니다. 콜백 함수는 다른 함수에 인수로 전달되어 그 함수에 의해 호출되는 함수입니다.  쉽게 말해 함수의 매개변수에 사용하는 함수를 콜백 함수라고 합니다.

 

그럼 콜백함수를 사용하는 대표적인 함수를 살펴보겠습니다. 

 

map( ) 함수

먼저 map( ) 함수는 리스트의 요소를 함수에 넣고 리턴된 값으로 새로운 리스트를 만들어 주는 함수입니다. 

 

map(함수, 리스트)

 

이런 형태로 되어있습니다.

 

간단한 예시를 한번 들어보겠습니다.

def mul(item):
    return item ** 2
    
    
list_input_a = [1,2,3,4,5]

 

위 처럼 값을 제곱해주는 함수와 리스트가 있습니다. map( ) 함수를 사용해보겠습니다.

 

print((map(mul, list_input_a)))

 

이런 결과가 나오게 되는데 이를 제너레이터라 합니다. 일단 list( )함수를 이용해 자료형으로 변환해 출력해보겠습니다.

print(list(map(mul, list_input_a)))

 

이렇게 리스트의 값들을 함수에 넣고 리턴해 리스트로 구성되 나왔습니다。

 

 

그럼 한번 map( ) 함수를 구현해보겠습니다.

 

def my_map(콜백함수, 리스트):
    output = []
    for i in 리스트:
        output.append(콜백함수(i))
    return output
    

print(my_map(mul, list_input_a))

 

my_map이란 함수를 만들고 매개변수로 콜백함수와 리스트를 넣습니다. 그리고 output이라는 빈 리스트를 넣고 매개변수로 받은 리스트를 반복하여 콜백함수에 넣은 값을 빈 리스트에 추가했습니다. 결과는 다음과 같이 잘 나온것을 볼 수 있습니다.

 

 

filter( ) 함수

 

다음은 filter( ) 함수입니다. filter( ) 함수는 리스트 요소를 함수에 넣고 리턴된 값이 True인 것으로, 새로운 리스트를 구성해주는  함수입니다.

 

def odd(item):
    if item % 2 == 1:
        return True
    else:
        return False

 

다음과 같이 홀수를 참으로 하는 함수 odd를 만들었습니다. 이제 앞에 사용했던 리스트로 filter( ) 함수를 이용해서 조건에 맞는 새로운 값들만 모아보겠습니다.

 

print(list(filter(odd, list_input_a)))

 

홀수인 값들만 뽑아져 나온 것을 볼 수 있습니다. 그럼 filter( ) 함수 역시 구현을 해보겠습니다.

 

def my_filter(콜백함수, 리스트):
    output = []
    for i in 리스트:
        if 콜백함수(i) == True:
            output.append(i)
        else:
            continue
    return output

my_filter(odd, list_input_a)

 

my_filter라는 함수의 매개변수에 사용할 함수와 리스트를 넣습니다. 그 후 빈 output 리스트를 만들고 사용할 리스트를 반복하는데 그중 콜백함수에 넣어서 참인 것들만 output에 추가하고 나머지는 무시했습니다. 결과는 다음처럼 잘 나온 것을 볼 수 있습니다.