map과 filter가 하는 일
map(fn, items)은 각 원소를 함수로 바꾸고, filter(predicate, items)는 조건을 통과한 원소만 남겨. Python 3에서는 둘 다 필요한 순간에 값을 만드는 반복자를 돌려줘.
컴프리헨션이 더 잘 읽힐 때
짧은 lambda를 붙인 map/filter는 같은 내용을 컴프리헨션보다 멀리 떨어뜨려 읽게 해. 표현식과 조건이 간단하면 컴프리헨션이 보통 선명해. 반대로 str.upper처럼 이미 이름이 있는 함수를 그대로 적용한다면 map도 자연스러워.
any와 all은 일찍 멈춘다
any는 하나라도 참이면, all은 모두 참이면 참을 돌려줘. 답이 정해지는 순간 나머지를 읽지 않으므로 제너레이터 표현식과 잘 맞아. 빈 반복값에서 any는 거짓, all은 참이라는 논리적 정의도 기억해.
원칙: 같은 결과라면 변환과 조건이 한눈에 보이는 형태를 골라. 함수 이름이 이미 뜻을 말해 주면 map, 식 자체가 뜻이면 컴프리헨션이 대개 나아.