Map
- 문제 풀이 과정에서 사용했던 함수. (정리했던 내용)
map(func, *iterables)
단독으로는 사용할 수 없으며 사용 시 iterate 해야함.
def squar_num(num):
return num**2
- 숫자로 된 리스트에 제곱 함수를 사용하려면
for 문을 사용할 수 있지만 map() 함수를 사용하면 쉽게 결과를 구할 수 있음.
a = [4,5,6]
for item in map(squar_num,a):
print(item)
> 16
25
36
list(map(squar_num,a))
> [16,25,36]
- map()에 함수를 사용할 때에는 괄호 없이 인자처럼 함수명만 입력해야함
- 만약 함수에 괄호를 사용할 경우 TypeError가 발생
Filter
- 항목을 함수에 입력할 때, True이기 때문에 iterable한 항목을 만드는 iterator를 반환.
- True 나 False로 반환하는 함수를 사용해야함.
map()
과 마찬가지로 filter(function or None, iterable)
함수를
단독으로 사용할 수 없으며 사용 시 iterate 해야함.
def check_num(my_num):
return my_num%2 == 0
n1 = [2,3,4,5]
for items in filter(check_num,n1):
print(items)
> 2
4
list(filter(check_num,n1))
> [2,4]
Lambda 표현식
- 함수의 이름을 붙이지 않기 때문에 익명 함수라고 불림.
- 단 "1"번만 사용하며, 사용 후 참조도 하지 않음.
- 모든 단일 함수를 람다 표현식으로 변경할 수는 없음.
- 일반적으로 map(), filter()의 function 부분에 사용.
Lambda 표현식 만드는 법
1. 일반적인 함수 생성
def square(num):
result = num ** 2
return result
square(5)
> 25
2. 결과 변수 제거 후 한줄로 표현
def square(num): return num ** 2
3. 'def' 키워드, reurn 제거하고 앞에 lambda 입력
- 1번만 사용할 것이기 때문에 def 함수명 미사용.
- lambda 옆의 ':' 은 무조건 반환하기 때문에 return 제거.
lambda num: num ** 2
square = lambda num: num ** 2
map() ▶ lambda
a = [4,5,6]
def squar_num(num):
return num**2
list(map(squar_num,a))
list(map(lambda num:num**2,a))
> [16, 25, 36]
names = ['Thrall','Sylvanas','Jaina']
list(map(lambda n : n[0],names))
filter() ▶ lambda
a = [4,5,6]
def check_num(my_num):
return my_num%2 == 0
list(filter(check_num,a))
list(filter(lambda my_num:my_num%2 == 0,a))
> [4,6]