반응형
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 |