Python 강좌 : 제 21강 - 람다 함수
람다(lambda) 함수
람다(lambda)
함수는 사용자 정의 함수와 비슷한 역할을 합니다.
함수명을 정해 사용하는 사용자 정의 함수와 다르게 이름없이 사용하는 익명 함수입니다.
간단한 기능을 정의해 한 번만 사용하고 사라지게 됩니다.
람다 함수는 함수명 = lambda 변수명 : 수식
의 형태로 사용합니다.
변수명
은 x, y, z 등의 값을 사용하며, 수식은 변수명
에서 사용된 값을 활용합니다.
lambda
를 사용하여 한 줄로 되어있는 수학 함수를 생성하거나 특정 형태나 형식 등으로 변환할 수 있습니다.
간단한 수학함수가 필요한 경우 람다 함수를 호출하여 사용합니다.
함수 생성
- 결과
- 3
[1, 2, 3, 4]
YUNDAEHEE
함수명=lambda 매개변수1, 매개변수2, ... : 반환식
을 사용하여 람다 함수를 선언할 수 있습니다.
함수명(인수1, 인수2 ...)
를 사용하여 함수를 호출합니다.
- Tip :
정수
,List
,문자열
등을 사용 할 수 있습니다.
기본값 설정
- 결과
- 4
6
매개변수
에 기본값
을 할당할 수 있습니다.
기본값이 할당되면 함수를 호출할 때 매개변수
를 채우지 않으면 기본값
으로 사용합니다.
다중 입력
- 결과
- 14
매개변수
에 *
를 입력할 경우 개수를 지정하지 않고 매개변수를 지정할 수 있습니다.
여러개의 매개변수들이 포함될 수 있습니다.
단, 반환값은 하나의 값
만 반환할 수 있습니다.
다중 반환
- 결과
- 2
3
4
List
로 사용할 경우 대괄호([])
를 사용하여 선택된 수식으로 반환됩니다.
List
가 아닌, Dict
로 사용할 경우, 원하는 Key
값을 통해 특정 람다 함수를 사용할 수도 있습니다.
최대/최소
- 결과
- [9, 1]
[6, 4]
[6, 4]
[9, 1]
최댓값
함수와 최솟값
함수에도 람다식을 적용하여 특정 최대/최소를 검출할 수 있습니다.
1차원 이상의 객체에서 특정 요소에 있는 값을 기준으로 찾으려 할 때, 어떤 요소의 값을 기준으로 찾을지 설정할 수 있습니다.
lambda x: x[0]
라면 첫 번째 요소의 값으로 검색을 시작하며, lambda x: x[1]
라면 두 번째 요소의 값으로 검색을 시작합니다.
정렬
- 결과
- [’!’, ‘+’, ‘/’, ‘[’, ‘\’, ‘]’, ‘가’, ‘각’, ‘갂’, ‘갃’, ‘간’, ‘감’]
[33, 43, 47, 91, 92, 93, 44032, 44033, 44034, 44035, 44036, 44048]
Python에서 사용되는 모든 문자열은 유니코드(Unicode)
로 간주합니다.
그러므로, 문자열을 정렬할 때 각 문자들을 유니코드로 변경하고 인스턴스 끼리의 비교(<, >)를 진행하게 됩니다.
정렬에 사용되는 람다식의 x
는 “가”, “각”, “감”, … “\“이 되며, 이 값들을 유니코드로 변경하여 대소 비교를 통해 정렬합니다.
만약, 정렬하려는 반복 가능한 객체(iterable)
에 서로 다른 데이터 타입이 존재한다면, '<' not supported between instances of 'int' and 'str'
등 의 오류가 발생합니다.
이럴 경우에는 명시적으로 요솟값을 str
이나 int
로 변경하여 정렬합니다.
복합 정렬
- 결과
- [[3, ‘d’], [5, ‘c’], [1, ‘a’], [0, ‘b’], [0, ‘a’]]
[[5, ‘c’], [3, ‘d’], [1, ‘a’], [0, ‘b’], [0, ‘a’]]
[[1, ‘a’], [0, ‘a’], [0, ‘b’], [5, ‘c’], [3, ‘d’]]
[[0, ‘a’], [0, ‘b’], [1, ‘a’], [3, ‘d’], [5, ‘c’]]
정렬하려는 객체가 2차원 이상이라면, 비교하는 x
에는 [3, “d”], [5, “c”], … [0, “a”]가 됩니다.
만약, 특정 원소를 지정하지 않고 key=lambda x : x
처럼 사용한다면, 첫 번째 원소를 기준으로 정렬하게 됩니다.
특정한 원소를 기준으로 정렬한다면, 어떤 값을 기준으로 정렬할지 표기합니다.
여기서, 정렬 함수는 기본적으로 오름차순 형태로 정렬합니다.
그러므로, 비교하는 원소를 음수로 변경한다면 내림차순
으로 변경할 수 있습니다.
여러가지 기준으로 정렬하려고 한다면, 객체로 감싸 정렬 우선순위를 할당할 수 있습니다.
예제의 L3
의 경우 첫 번째 원소를 기준으로 정렬하면서, 두 번째 원소를 차선으로 정렬하게 됩니다.
즉, [0, "b"]
와 [0, "a"]
를 비교할 때, 0
이 동일하므로, 그 다음 조건으로 a
와 b
를 대상으로 다시 정렬하게 됩니다.
댓글 남기기