PYTHON
[PYTHON] lambda 함수 활용(map, reduce, filter)
_알파카
2024. 2. 2. 15:00
728x90
map 함수와 lambda 함수의 조합
람다는 함수의 간단한 형식을 의미한다. (익명함수)
예를 들어,
# 두 수를 더하는 함수
def hap(x, y):
return x + y
hap(10, 20)
# 30
##### 람다 형식으로 써보자
(lambda x, y: x+y)(10, 20)
람다함수는 다양하게 활용할 수 있는데..
map( )
map(함수, 리스트)
map은 함수와 리스트를 인자로 받는데, 리스트로부터 원소를 하나씩 꺼내서 함수에 적용시킨다.
list(map(lambda x: x ** 2, range(5)))
# [0, 1, 4, 9, 16]
위와 같이, 원소에 적용할 함수를 첫 인자, 다음 인자에 리스트 범위 혹은 리스트 자체를 너어주면 된다.
reduce( )
reduce(함수, 시퀀스)
reduce 함수의 형식은 위와 같은데, 시퀀스(문자열, 리스트, 튜플)의 원소들을 누적하여 함수에 적용시킨다.
from functools import reduce # 파이썬 3에서는 써줘야한다.
reduce(lambda x, y: x + y, [0, 1, 2, 3, 4])
# 10
즉, 0 + 1 + 2 + 3 + 4를 수행한다는 의미이다!
reduce(lambda x, y: y + x, 'abcde')
# 'edcba'
위의 예제는 y+x를 적용하였으므로, edcba 의 값이 나온다. (참 어렵군^^)
filter( )
filter(함수, 리스트)
filter 함수는 리스트의 원소들을 함수에 적용시켜 결과가 참인 값들로 새로운 리스트를 만들어준다.
# 0부터 9의 리스트 중에서 5보다 작은 것들만 새로운 리스트로 만드는 예제
list(filter(lambda x: x < 5, range(10)))
# [0, 1, 2, 3, 4]
# 0부터 9까지 중 홀수만 돌려줌
list(filter(lambda x: x % 2, range(10)))
# [1, 3, 5, 7, 9]
문제에서의 예시를 확인해보자!
리스트의 모든 원소에 곱셈을 한다고 생각해보자.
2024.02.02 - [코딩테스트/PYTHON] - [프로그래머스][PYTHON] Lv. 0 조건에 맞게 수열 변환하기 3 ( + map과 lambda)
1. for문을 사용하여 리스트의 모든 원소 연산
arr = [1, 2, 3]
####### for문 사용
answer = []
for i in arr:
answer.append(i*3)
print(answer)
# answer = [ i * 3 for i in arr ] 과 같다.
# [3, 6, 9]
2. map과 lambda를 사용하여 리스트의 모든 원소 연산
arr = [1, 2, 3]
####### map과 lambda 사용
arr = list(map(lambda x:x*3, arr))
# [3, 6, 9]
3. numpy array를 사용하여 리스트의 모든 원소 연산
arr = [1, 2, 3]
####### numpy 배열 활용
import numpy as np
arr = np.array(arr)
print(arr*3)
# [1 2 3]
# 출력이 numpy array 형식이다.
이처럼 다양한 방법을 통해 리스트 원소 연산을 할 수 있지만,
map과 lambda를 사용하는 방법이 매우 간편하므로, 자주 사용해보자
728x90