PYTHON

[PYTHON] lambda 함수 활용(map, reduce, filter)

_알파카 2024. 2. 2. 15:00
728x90

map 함수와 lambda 함수의 조합

https://wikidocs.net/64

 

3.5 람다(lambda)

오늘은 람다 형식과 그것을 이용하는 여러 가지 함수들에 대해서 알아보겠습니다. 당장 완벽하게 소화하실 필요는 없을 것 같구요, 가벼운 마음으로 이런 것이 있다는 정도만 아셔도 되…

wikidocs.net

 

람다는 함수의 간단한 형식을 의미한다. (익명함수)

예를 들어, 

# 두 수를 더하는 함수
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)

 

[프로그래머스][PYTHON] Lv. 0 조건에 맞게 수열 변환하기 3 ( + map과 lambda)

문제 설명 https://school.programmers.co.kr/learn/courses/30/lessons/181835 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁

yeonnys.tistory.com

 

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