[파이썬] 리스트 필터링 :: 리스트에서 원하는 요소만 추출하기
어떤 리스트에서 원하는 요소만 추출하기(필터링하기)
파이썬은 list에서 아주 쉽게 원하는 요소만 추출해서 새로운 list를 만들 수 있다.
방법 1: filter 함수 사용하기
첫 번째 방법은 filter내장 함수
를 사용하는 것이다.
filter함수
를 사용하기 위해서는 bool을 반환하는 함수
와 추출할 대상인 list(또는 Iterable)
가 필요하다.filter함수
는 다음과 같이 사용하면 된다.
예를 들어서, 내가
originalList = [1, 2, 44, 52, 61, 7, 28, 92, 10]
위와 같은 list에서 5보다 큰 수만 뽑아내고 싶다고 해보자.
먼저, 5보다 크면 True를 반환하는 함수를 만든다.
def isBiggerThanFive(x):
return x>5
다음, isBiggerThanFive함수를 인자로하는 filter함수
를 쓰면 끝이다.
newList = list(filter(isBiggerThanFive, originalList))
그러면 newList의 원소들은 [44, 52, 61, 7, 28, 92, 10]이 된다.
참고로 filter함수
를 list()
로 감싸준 이유는 (python2와 다르게) python3의 filter함수
는 iterable을 반환했기 때문이다. 그래서 list로 쓸려면 우리가 list로 만들어 줘야 한다.
방법 2: List Comprehension 사용하기
두 번째 방법은 List Comprehension을 사용하는 것이다.
newList = [x for x in iterable]
기본적인 List Comprehension은 위와 같은 형태로 사용한다.
in iterable의 iterable은 반복(열거) 가능한 list와 같은 것.
for x의 x는 iterable의 item(원소)로 사용할 변수.
제일 앞에 있는 x는 각각의 iterable 원소를 어떻게 변환할지 적는다.
(예시)
- iterable 원소들을 모두 2배한 리스트를 만들고 싶으면 [2*x for x in iterable]
- iterable를 그대로 복사한 리스트를 만들고 싶으면 [x for x in iterable]
기본적인 형태는 저렇고 어떤 list를 추출하려면 조건이 필요하기 때문에 Nested List Comprehension을 사용한다.
newList = [x for x in iterable if 조건]
Nested List Comprehension은 위와 같은 형태로 사용한다.
Nested List Comprehension은 조건을 추가하여 iterable에서 사용할 item(원소)를 선별할 수 있다.
Nested List Comprehension으로 (위의 filter함수와 같이) originalList에서 5보다 큰 원소들을 추출한 list를 만들려면 아래와 같이 사용하면 된다.
newList = [x for x in origianlList if x>5]
More Examples
어떤 리스트(originalList)에서 짝수만 추출한 새로운 리스트를 만들고 싶은 경우 아래와 같은 방법들을 쓸 수 있다.
방법 1: filter
filter 함수
- 형식:
filter(함수_이름, iterable)
filter함수
의 인자로 들어가는 함수의 리턴 타입은 bool형이여야 한다. 람다를 쓰면 편하다.- 리턴 타입:
iterator(filter object)
- Python3 내장 함수이다.
filteredList = list(filter(lambda x: x%2==0, originalList))
방법 2: List Comprehension
Nested List Comprehension
filteredList = [x for x in originalList if x%2==0]
물론 이런 기능들을 안 쓰고 내가 만들어도 된다.
하지만 개인적으로 이런 것들을 쓰니깐 더 코드가 간결해지는 것 같다(특히 코드가 길어질수록).
댓글
이 글 공유하기
다른 글
-
Rye로 파이썬 프로젝트 세팅해보기!
Rye로 파이썬 프로젝트 세팅해보기!
2024.07.15 -
[파이썬] Thread를 사용하기 전에 알아야 할 몇 가지 주의점들
[파이썬] Thread를 사용하기 전에 알아야 할 몇 가지 주의점들
2020.05.23 -
[파이썬] 리스트 변형 :: 리스트를 원하는 형태로 바꾸기, 리스트 형변환
[파이썬] 리스트 변형 :: 리스트를 원하는 형태로 바꾸기, 리스트 형변환
2019.08.15