2014-07-18 2 views
0

익명 함수를 사용하여 filter()에 대해 여러 가지 예제를 시도했지만 문자열에 사용하는 한 항상 이상한 결과가 나타납니다. 다음은 예입니다.`filter()`가 Python 2.x와 3.x 사이에서 변경 되었습니까?

>>>print(filter(lambda x: x.isdigit(), "aas30dsa20")) 
<filter object at 0x00000000035DE470> 

문자열이 없으면 모든 것이 정상적으로 작동합니다. 예 : 나는 list() 기능 부분을 제거하면 그런데

>>> print(list(filter(lambda x: x >= 30 and x <= 70, [x**2 for x in range(1,11)]))) 
[36, 49, 64] 

는 문자열의 경우와 유사한 문제가 나타납니다

>>> print(filter(lambda x: x >= 30 and x <= 70, [x**2 for x in range(1,11)])) 
<filter object at 0x00000000037BFDD8> 

내가

+1

[yes] (https://docs.python.org/3.0/whatsnew/3.0.html#views-and-iterators-instead-of-lists). – jonrsharpe

답변

2

윈도우 7에 파이썬 3.4.1를 사용하고 있음 . 몇 가지 기능 도구 (특히 filter()map())가 3.x 용 시퀀스 대신 반복기를 반환하도록 변경되었습니다.

1

Python 2에서 filter() 함수는 시퀀스의 각 항목에 대해 True 또는 False를 반환하는 함수를 통해 시퀀스를 필터링 한 결과 목록을 반환했습니다. Python 3에서 filter() 함수는리스트가 아닌 반복자를 리턴합니다. 출처 : diveintopython3.net

2to3 tool 결과가 여전히 목록인지 확인하기 위해 filter() 호출을 둘러싼 list() 호출을 배치하는 경우가 있습니다. Python 2와 Python 3 모두에서 2to3 변환없이 실행되는 코드가 필요하고 결과가 목록이어야한다면 동일한 작업을 수행 할 수 있습니다.

관련 문제