Language/Python

Python - filter(), iterable 변수 내 값 중 조건에 맞는 값만 반환

TechNote.kr 2020. 2. 22. 23:42
728x90

filter

>>> filter(function, iterable)

 

iterable 한 data를 function 의 인자로 넣어 False 가 아닌 결과를 반환하는 인자들만 iterator 형태로 반환해 주는 함수

 

[Link : iterable 과 iterator, 그리고 반복문]

filter(function, iterable)

Construct an iterator from those elements of iterable for which function returns true. iterable may be either a sequence, a container which supports iteration, or an iterator. If function is None, the identity function is assumed, that is, all elements of iterable that are false are removed.

Note that filter(function, iterable) is equivalent to the generator expression (item for item in iterable if function(item)) if function is not None and (item for item in iterable if item) if function is None.

See itertools.filterfalse() for the complementary function that returns elements of iterable for which function returns false.


[Python3 기준 예제]

>>> data = [1, 2, 3, 4, 5]
>>> def mul(item):
...     if item > 3:
...             return True
...     else:
...             return None
... 
>>> list(filter(mul,data))
[4, 5]
>>> data = [1, 2, 3, 4, 5]
>>> def mul_dup(item): 
...     if item > 3:
...             return True
...     else:
...             return False
... 
>>> list(filter(mul_dup,data))  
[4, 5]
>>> data = [1, 2, 3, 4, 5]
>>> def mul_dup2(item):
...     if item > 3:
...             return True
...     else:
...             return 0
... 
>>> list(filter(mul_dup2,data)) 
[4, 5]

 

위와 같이 iterable 한 data (여기서는 list 형) 를 인자로 넣어 True 로 판단되는 값을 반환할 경우 해당 인자를 추려 결과로 돌려준다. 

 

위에서 볼 수 있듯이 False, None, 0 과 같은 값들이 False 로 판단되어 해당 인자는 무시되는 것을 확인할 수 있었다. 

 

다만, 아래와 같이 음수를 리턴할 경우는 False 로 판단하지 않는다. 

>>> data = [1, 2, 3, 4, 5]
>>> def mul_dup3(item): 
...     if item > 3:
...             return True
...     else:
...             return -1
... 
>>> list(filter(mul_dup3,data)) 
[1, 2, 3, 4, 5]

 

유사한 함수인 map 과 마찬가지로 지능형 리스트를 통해 filter 함수를 사용하지 않고 더욱 간단하게 표현을 할 수도 있다. 

 

[Link : 지능형 리스트에 대한 이해]

>>> data = [1, 2, 3, 4, 5]
>>> [item for item in data if item > 3]     
[4, 5]

 


>>> help(filter)
Help on class filter in module builtins:

class filter(object)
 |  filter(function or None, iterable) --> filter object
 |
 |  Return an iterator yielding those items of iterable for which function(item)
 |  is true. If function is None, return the items that are true.
 |
 |  Methods defined here:
 |
 |  __getattribute__(self, name, /)
 |      Return getattr(self, name).
 |
 |  __iter__(self, /)
 |      Implement iter(self).
 |
 |  __next__(self, /)
 |      Implement next(self).
 |
 |  __reduce__(...)
 |      Return state information for pickling.
 |
 |  ----------------------------------------------------------------------
 |  Static methods defined here:
 |
 |  __new__(*args, **kwargs) from builtins.type
 |      Create and return a new object.  See help(type) for accurate signature.

 

 

 

 

728x90