Algorithm

[python] lambda 표현식

Jaaaay 2022. 6. 6. 16:13

람다(lambda)

1. 의미

익명함수를 지칭하는 용어

즉, 기존의 함수(명 등)을 선언하고 사용하던 방식과는 달리 바로 정의하여 사용할 수 있는 함수.

그래서 호출하면, 그대로 호출하면 함수 객체가 나온다.사용할 때는 변수에 할당하거나 해줘야 함.

(귀찮은 과정을 생략하고 쉽게 임시로 생성하여 쓰고 버리기 용이한 함수랄까?)

2. 형식

lambda 인자 : 표현식

예시)

add_num = lambda x: x+1

3. 다양한 응용법

3-0. 할당하지 않고 쓰기

람다 표현식을 괄호로 묶은 뒤에 다시 괄호를 붙이고 인수를 넣어 호출

>>>(lambda x: x + 10)(1)
11

3-1. 인자 두 개 쓰기

lambda x,y: x+y

가 가능하다

3-2. if 사용하기

check_pass = lambda x: 'pass' if x>=70 else 'fail'

3-3. 리스트를 정렬할 때 key로 사용(sort, sorted)

1)

a = [(1, 2), (5, 1), (0, 1), (5, 2), (3, 0)]

# key 인자를 정하지 않은 기본적인 sort에선, 튜플 순서대로 우선순위 기본 할당.
b = sorted(a)
# b = [(0, 1), (1, 2), (3, 0), (5, 1), (5, 2)]

# key 인자에 함수를 넘겨주면 우선순위가 정해짐.
c = sorted(a, key = lambda x : x[0])
# c = [(0, 1), (1, 2), (3, 0), (5, 1), (5, 2)]
d = sorted(a, key = lambda x : x[1])
# d = [(3, 0), (5, 1), (0, 1), (1, 2), (5, 2)]

# 비교할 아이템이 요소가 복수 개일 경우, 튜플로 우선순위를 정해줄 수 있다.
# -를 붙이면, 현재와 반대차순으로 정렬된다.
e = sorted(a, key = lambda x : (x[0], -x[1]))
# e = [(0, 1), (1, 2), (3, 0), (5, 2), (5, 1)]
f = sorted(a, key = lambda x : -x[0])
# f = [(5, 1), (5, 2), (3, 0), (1, 2), (0, 1)]

2)

s = ['2 A', '1 B', '4 C', '1 A']

>>>sorted(s)
['1 A', '1 B', '2 A', '4 C']

#하지만 나는 뒷문자 순 정렬을 원한다!
>>> s.sort(key=lambda x: (x.split[1], x.split[0]))
['1 A', '2 A', '1 B', '4 C']

3-4. 람다 표현식을 인수로 활용(map, filter, reduce)

  1. map()과 함께
>>> list(map(lambda x: x+10, [1,2,3]))
[11, 12, 13]
  1. filter()와 함께

    filter()는 boolean 값을 리턴하는 함수를 받아 조건에 맞으면 데이터를 반환하고 그렇지 않으면 반환하지 않는다.

>>> a = [8, 4, 2, 5, 2, 7, 9, 11, 26, 13]
>>> result = list(filter(lambda x : x > 7 and x < 15, a))
[8, 9, 11, 13]
  1. reduce()와 함께

    reduce()는 처음부터 함수에 순차적인 값을 처리.

(누적시킨달까?)

#reduce는 functools 모듈을 불러와야 사용가능.
>>> from functools import reduce t = [47, 11, 42, 13]
>>> result = reduce(lambda x, y : x + y, t)
113

참고한 링크:http://hleecaster.com/python-lambda-function/https://dojang.io/mod/page/view.php?id=2359https://velog.io/@k904808/Lambda-%ED%91%9C%ED%98%84%EC%8B%9D..-%EC%9C%BC%EC%9C%BC%EC%9C%BChttps://engkimbs.tistory.com/657