연오는 개 다섯 마리를 키우고 있다. 어느날 외출하고 돌아오니 누군가가 침대를 물어뜯은 것이 아닌가! 현장 조사 결과, 범인은 주둥이가 작고, 발이 크고, 흰색 털을 가진 개라는 것을 알 수 있었다. 연오는 용의자를 좁히기 위해 개의 정보를 정리했다. 이 데이터를 선별해 용의자로 의심되는 개를 모두 찾아 그 이름을 화면에 출력하라.
용의자 = [
{'이름': '멍멍', '털': '흰색', '주둥이': '크다', '발': '크다'},
{'이름': '킁킁', '털': '검은색', '주둥이': '작다', '발': '크다'},
{'이름': '왈왈', '털': '흰색', '주둥이': '작다', '발': '크다'},
{'이름': '꿀꿀', '털': '검은색', '주둥이': '작다', '발': '작다'},
{'이름': '낑낑', '털': '흰색', '주둥이': '작다', '발': '작다'},
]
코드
용의자 = [
{'이름': '멍멍', '털': '흰색', '주둥이': '크다', '발': '크다'},
{'이름': '킁킁', '털': '검은색', '주둥이': '작다', '발': '크다'},
{'이름': '왈왈', '털': '흰색', '주둥이': '작다', '발': '크다'},
{'이름': '꿀꿀', '털': '검은색', '주둥이': '작다', '발': '작다'},
{'이름': '낑낑', '털': '흰색', '주둥이': '작다', '발': '작다'},
]
# 범인은 주둥이가 작고, 발이 크고, 흰색 털을 가진 개
profiled_dogs_1 = filter(lambda dog: dog['주둥이'] == '작다', 용의자)
profiled_dogs_2 = filter(lambda dog: dog['발'] == '크다', profiled_dogs_1)
profiled_dogs_3 = filter(lambda dog: dog['털'] == '흰색', profiled_dogs_2)
for dog in profiled_dogs_3:
print(dog['이름'])
실행 결과
왈왈
filter()
함수를 세 번 사용하여 세 차례에 걸쳐 선별했다. 물론, filter(lambda dog: dog['주둥이'] == '작다' and dog['발'] == '크다' and dog['털'] == '흰색', 용의자)
와 같이 and
연산자로 조건을 합쳐 한번에 선별하는 것도 좋은 방법이다.filter()
함수 대신 리스트 조건제시법을 사용하는 것도 좋은 방법이다. 다음은 리스트 조건제시법을 이용한 답안의 예다.print([
dog['이름']
for dog
in 용의자
if dog['주둥이'] == '작다' and dog['발'] == '크다' and dog['털'] == '흰색'
])
filter()
함수와 리스트 조건제시법을 사용하는 것도 코드를 더 간결하고 쉽게 작성하는 방법이니 소홀히 하지 말자.