알고리즘 공부💥/본연의 알고리듬

[알고리듬] 파이썬 함수 lambda

hyunsix 2021. 9. 24. 22:32

람다함수란 ? 일반함수를 굳이 def ~ return으로 선언하지 않고 가볍게 만들 수 있는 연산함수

# 예를 들어
def is_even(x):
    if x % 2 == 0:
        return True
    return False

# 아래처럼 람다함수로 변환 가능
is_even = lambda x : x % 2 == 0

# 사용 법은 둘 다
is_even(1)
is_even(2) ...

 

lambda & map함수

람다함수는 map함수랑 짝지어서 자주 사용됨 !

map함수는 리스트나, 튜플에 어떠한 처리를 할 때 사용하는 함수로

map(함수, 리스트) 식으로 첫번째 인자에는 함수, 두번째 인자에는 리스트(or튜플)를 받음

# 흔히 공백으로 이루어진 숫자리스트를 인풋 받을 때 아래와 같이 받는데
number_list = list(map(int, input().split()))
# 공백기준으로 나누어 받은 친구들을 int함수로 숫자화 시키고(인풋값은 스트링으로 오기 때문) 그 바깥에서 한 번 더 list화 시킨다는 의미!

 

즉 첫번째 인자인 함수가 두번째 인자로 들어온 리스트나, 튜플에 특정한 처리를 하고 그 처리된 값을 리턴시켜줌

 

# 만약 모든 값을 *2해주는 함수를 만든다고 치면

# 일반함수
def 곱하기_2(x):
    return x * 2

ans1 = list(map(곱하기_2, [1,2,3,4,5,6,7,8,9,10]))
print(ans1)

# 람다 적용
ans2 = list(map((lambda x: x*2), [1,2,3,4,5,6,7,8,9,10]))
print(ans2)

 

lambda & sort함수

람다는 sort함수에서 key값으로도 자주 사용됨!

# 요소들의 길이 기준으로 정렬하고 싶을 때
data_list = ['길이', '가', '다릅니다', '맞죠']
data_list.sort(key=lambda x : len(x))
print(data_list)
# ['가', '길이', '맞죠', '다릅니다']

# list안에 2개의 요소가 있을 때 두번째 요소 기준으로 정렬하고 싶을 때
data_list = [[-20, 15], [-14, -5], [-18, -13], [-5, -3]]
data_list.sort(key=lambda x : x[1])
print(data_list)
# [[-18, -13], [-14, -5], [-5, -3], [-20, 15]]

# list안에 2개의 요소가 있을 때 우선 첫 번째 인자를 기준으로 오름차순 정렬하고, 같을 시 두번째 인자 기준으로 내림차순 정렬하고 싶을 때
data_list = [[1,3], [0,1], [1,5], [1,4], [1,3], [2,4]]
data_list.sort(key=lambda x : (x[0], -x[1]))
print(data_list)
# [[0, 1], [1, 5], [1, 4], [1, 3], [1, 3], [2, 4]]

 

lambda & filter 함수

filter함수는 filter(함수, 리스트)로 이루어지는데 리스트의 요소들을 하나씩 함수에 넣어서 True인 경우만 걸러서 새로운 리턴값을 생성해준다고 생각하면 됨

# 짝수만 거르는 경우

# 일반 함수
def is_even(x):
    return x % 2 == 0

result1 = list(filter(is_even), range(10))


# 람다 함수
result2 = list(filter(lambda x : x % 2 == 0, range(10)))