파이썬 리스트 조건 추출 - paisseon liseuteu jogeon chuchul

[파이썬] 리스트 필터링 :: 리스트에서 원하는 요소만 추출하기

  • 2019.08.10 20:36
  • Programming Language/Python

어떤 리스트에서 원하는 요소만 추출하기(필터링하기)

파이썬은 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 iterableiterable은 반복(열거) 가능한 list와 같은 것. 
for xxiterable의 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]

물론 이런 기능들을 안 쓰고 내가 만들어도 된다.
하지만 개인적으로 이런 것들을 쓰니깐 더 코드가 간결해지는 것 같다(특히 코드가 길어질수록).



나 취준생/파이썬

2020. 12. 7. 14:49

# 자료형의 특정 조건 값만 추출해내는 함수 (filter)

파이썬 내장함수인 filter()는 리스트와 같은 자료형에서

특정 조건을 만족하는 값만 편리하게 추출할 수 있는 방법을 제공한다.

filter()의 첫번째 인자는 특정 조건의 값을 추출하는 함수가 입력되며,

두번째 인자(입력매개변수)에는 리스트와 같은 자료형이 입력된다.

예제 : 숫자가 나열되어 있는 리스트에서 짝수만 추출해내는 코드

a=[1,2,3,4,5,6,7,8,9,10]

1. 숫자를 입력하면 짝수라면 결과를 출력하고 홀수면 출력하지 않는 함수

def get_even(num):

if num%2==0:

return num

else:

return

print(get_even(2))

print(get_even(5))

2. filter 함수와 get_even 함수를 이용해서 a 리스트에서 짝수를 추출하기

def get_even(num):

if num%2==0:

return num

else:

return

a=[1,2,3,4,5,6,7,8,9,10]

result=filter(get_even,a)

print(result)

파이썬 리스트 조건 추출 - paisseon liseuteu jogeon chuchul

해주면 내가 원하는 리스트가 아니라 객체의 위치?가 출력 되어버린다(!)

def get_even(num):

if num%2==0:

return num

else:

return

a=[1,2,3,4,5,6,7,8,9,10]

result=filter(get_even,a)

print(result)

print(list(result))

당황하지 말고, list()로 감싸서 리스트로 변환시켜주면 다음과 같이 리스트로 출력된다.

예제 : 리스트에서 값이 300 이상만 출력하는 코드

def up_300(num):

if num>=300:

return num

else:

return

b=[100,352,56,395,210,791]

result=filter(up_300,b)

print(list(result))