728x90
반응형
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 이라는 리스트에서 짝수만 뽑아낸 [2, 4, 6, 8, 10] 리스트를 만들려고 합니다. 어떻게 하면 될까요? 우선, for 구문을 이용해서 할 수 있겠지요?
list_orig = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
list_result = []
for num in list_orig:
if num % 2 == 0:
list_result.append(num)
print(list_result)
이것을 filter 함수를 이용해서도 구현할 수 있는데요. 먼저 filter 함수는 어떤 형태로 사용하는지 봅시다.
filter(조건함수, 순회가능한객체)
조건함수는 걸러내기위한 조건을 담은 함수를 의미하고, 순회가능한객체는 리스트, 튜플 등이 해당된다.
일단 조건함수부터 구현해보자.
def is_even(num):
return num % 2 == 0
이처럼 리턴값이 boolean 타입이어야 한다.
이제, 위의 조건함수과 함께 filter 함수를 사용해서 구현해보자.
list_orig = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
list_result = filter(is_even, list_orig)
print(type(list_result))
그런데, filter 함수가 리턴하는 값은 filter 객체이므로, list 내장함수로 filter객체를 리스트로 변환해주어야 한다.
list_orig = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
list_result = list(filter(is_even, list_orig))
print(list_result)
이렇게, 조작함수가 간단한 경우에는 lambda 함수로 작성하는 경우가 많다.
list_orig = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
list_result = list(filter(lambda num : num % 2 == 0, list_orig))
print(list_result)
이렇게 하면, for구문을 이용해서 구현한 것보다 라인수가 많이 줄어든 것을 알 수 있다.
참고로, 이 것을 또 다른 방법으로... 리스트 내포(list comprehesion) 구문을 이용해서도 가능하다.
list_orig = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
list_result = [num for num in list_orig if num % 2 == 0]
print(list_result)
lambda 함수와 리스트 내포에 대해서는 별도로 글을 남겼으니, 해당 글을 참고 바란다.
728x90
반응형
'Programming > Python' 카테고리의 다른 글
파이썬 map 함수를 알아보자 (0) | 2024.11.26 |
---|---|
파이썬 lambda 함수 (0) | 2024.11.15 |
파이썬 타입 힌트 알아보기 (0) | 2024.11.05 |
[ ... for ... if ... ] 파이썬 리스트 내포 구문 (List comprehension) (0) | 2024.11.01 |
.py(파이썬파일)을 .exe(실행파일)로 변환하기 (feat. PyInstaller) (0) | 2024.09.21 |