본문 바로가기

시행착오/[python]

[python] filter 함수 사용시 주의할 점 - iterator

stackoverflow.com/questions/44420135/filter-object-becomes-empty-after-iteration/44420191#44420191

>>> l = range(10)
>>> k = filter(lambda x: x > 5, l)
>>> list(k)
[6, 7, 8, 9]
>>> list(k)
[]

filter 함수 나온 결과값 확인하기 위해 프린트 찍고 그 값을 다른 곳에 넘기니까 빈 값이 나와 문제가 생긴적이 있다

위 사이트에 따르면 filter 함수는 이터레이터 객체를 반환하고 이 객체는 한번만 iterate 가능하다고 함

첫번째 list() 함수를 호출함으로서 끝까지 다 돌았으므로

두번째 list() 함수호출에서는 끝까지 다 돌아서 더이상 literate 할 것이 없으므로 빈값을 반환한다고 함 

 

참고로 python2 에서 filter는 list 를 리턴하기 때문에 위와같은 문제가 생기지 않는다고 함