본문 바로가기

파이썬/문법

[Python] filter란?

반응형
filter : N => N`

filter(function, iterable)

 

filter에 인자로 사용되는 function은 처리되는 각각의 요소에 대해 bool 값을 반환합니다.

True를 반환하면 그 요소는 남게 되고, False를 반환하면 그 요소는 제거 됩니다.

 

정의는 아무래도 말이 복잡하니 코드로 바로 보겠습니다.

 

def multiple3(x):
	return x % 3 == 0
    
print(multiple3(3))		# True
print(multiple3(1))		# False

 

3의 배수이면 True 3의 배수가 아니면 False를 반환하는 함수가 있다고 하자.

 

print(filter(multiple3, [3, 7, 9]))			# <filter object>

print(list(filter(multiple3, [3, 7, 9])))		# [3, 9]

print(list(filter(lambda x: x % 3 == 0, [3, 7, 9])))	# [3, 9]

 

이를 filter를 통해 정제 해보면 True를 반환하는 3의 배수만 남기고 filtering 되는 것을 볼 수 있다.,

 

이전에서 본 lambda와 함께 사용도 할 수 있다.

 

dataset = [1, -2, 3, -4 , 5]		# 양수만 제곱하여 반환 => [1, 9, 25]

 

이제 응용을 해보도록하자. 주어진 데이터셋에서 양수인 숫자들만 filter하여 제곱해주는 함수를 짜보도록하자.

 

def mul(data):
    temp = []
    for a in data:
        if a > 0:
            temp.append(a ** 2)
    print(temp)

mul(dataset)		# [1, 9, 25]

 

Python만의 독특한 문법을 사용하지 않고 기본적인 함수로 짜게 되면 다음과 같다. 

 

print(list(map(lambda x: x ** 2, filter(lambda x: x > 0, dataset))))

 

Python 만의 독특한 문법을 사용하면 한 줄로 깔끔하게 떨어지기도한다.

 

해석해보자면 dataset 에서 x > 0이 True인 x만 가져오겠다.  # filter(lambda x: x > 0, dataset)

선택된 변수들을 제곱하여 매핑한다.  # map(lambda x: x ** 2, ...)

이를 리스트로 변환하여 출력한다.

 

파이썬 문법의 가독성은 거의 최악이다.

반응형

'파이썬 > 문법' 카테고리의 다른 글

Python, MySQL 연결  (0) 2022.09.23
[파이썬] List Comprehension  (0) 2022.07.24
[Python] lambda 함수란?  (0) 2022.06.26