숫자로 이루어진 리스트 nums와 기준값 x가 주어졌을 때, nums 안에서 x보다 작은 값들만 골라내야 하는 경우가 자주 있습니다. 파이썬에는 내장 함수인 filter()가 있어, 조건을 판단하는 함수를 인자로 전달해 원하는 요소만 손쉽게 걸러낼 수 있습니다.
예를 들어 입력이 nums = [1,5,8,3,6,9,12,77,55,36,2,5,6,12,87], x = 50이라면, 50보다 작은 값만 남겨 출력 결과는 [1, 5, 8, 3, 6, 9, 12, 36, 2, 5, 6, 12]가 됩니다.
해결 접근 방법
- 조건을 판단할 함수 f를 정의합니다. 이 함수는 하나의 인자 a를 받습니다.
- a가 x보다 작으면 True를, 그렇지 않으면 False를 반환합니다.
filter()에 함수 f와 nums를 전달해 left_items를 생성합니다.- filter 객체인 left_items를
list()로 변환한 뒤 반환합니다.
예제 코드
def solve(nums, x): left_items = filter(lambda a: a < x, nums) return list(left_items) nums = [1,5,8,3,6,9,12,77,55,36,2,5,6,12,87] x = 50 print(solve(nums, x))
위 코드에서는 별도의 함수를 정의하는 대신 람다(lambda) 표현식을 사용해 조건을 간결하게 작성했습니다. lambda a: a < x는 각 요소 a에 대해 a가 x보다 작은지를 판단하며, filter()는 이 조건이 True인 요소만 남깁니다. 참고로 filter()의 반환값은 반복 가능한(filter 객체)이므로, 실제 리스트로 사용하려면 list()로 변환해 주어야 합니다.
입력
[1,5,8,3,6,9,12,77,55,36,2,5,6,12,87], 50
출력
[1, 5, 8, 3, 6, 9, 12, 36, 2, 5, 6, 12]
같은 동작은 리스트 컴프리헨션으로도 구현할 수 있습니다. 예를 들어 [a for a in nums if a < x]처럼 작성하면 filter 없이도 동일한 결과를 얻을 수 있으니, 상황에 맞게 선택해 사용하시면 됩니다.