map,filter함수
람다함수를 같이 활용해서 사용할 수 있다.
기존의 순서가 있는 자료형을 수정해서 새로운 순서가 있는 자료형을 만들기 위해 사용한다.
map함수
map(함수, 순서가 있는 자료형) *리스트, 튜플, 딕셔너리 등이 있다.
["1","2","3"] -> int함수 -> (1,2,3)을 가진 mapobject
mapobject는 다시 리스트 형으로 바꾸어주는 것이 사용하기 좋다.
list(map(int,["1","2","3"]))
#리스트 모든 요소 공백 제거
#1.기존 for문 사용
items = [" 안녕 "," 행복 "," 피곤해 "]
for i in items:
i.strip()
print(i)
안녕
행복
피곤해
#2.map을 사용할 경우
def strip_all(x):
return x.strip()
items = [" 안녕 "," 행복 "," 피곤해 "]
items = list(map(strip_all,items))
print(items)
['안녕', '행복', '피곤해']
#3.map사용 +람다함수
items = [" 안녕 "," 행복 "," 피곤해 "]
items = list(map(lambda a : a.strip(), items ))
print(items)
['안녕', '행복', '피곤해']
#map함수로 items의 요소들이 하나씩 함수 자리로 들어가게된다.
#함수 자리의 lambda함수가 들어온 요소들을 함수처리해서 결과를 반환하고
#마지막으로 결과들로 리스트를 만든다.
filter함수
기존 순서가 있는 자료형에서 조건을 만족하는 요소만 뽑고 싶을경우 사용한다.
filter(함수, 순서가 있는 자료형) *리스트, 튜플, 딕셔너리 등이 있다.
def func(x):
return x<0
filter(func, [-100,-50,0,1,3])
[-100,-50,0,1,3] -> 각각 함수로 들어가서 결과들을 모은다 => (-100,-50)의 filterobject를 만든다.
filterobject도 사용하기 위해서 list로 바꾸어서 사용하자.
기본함수
fruits = ["apple","banana","grape","mango"]
result =[]
for i in fruits:
if len(i) > 5:
result.append(i)
print(result)
["banana"]
filter사용했을 경우
fruits = ["apple","banana","grape","mango"]
def fun(x):
return len(x) > 5
a = list(filter(fun, fruits))
print(a)
["banana"]
lambda사용할 경우
fruits = ["apple","banana","grape","mango"]
a =list(filter((lambda i : len(i)>5), fruits))
print(a)
["banana]
map(),filter() 함수는 둘다 순회가능한 데이터를 하나씩 가지고와서 조작하는 함수이다.
그리고 결과값으로 각각 mapobject와 filterobject를 반환하므로 list()로 타입변경을 해주어야 한다.
또한 둘다 lambda를 함께 활용하면 더 간편하게 작업할 수 있다.