[Python] 람다표현식 : lambda (맵,리듀스,필터)
STUDY NOTE
람다(lambda, λ)
수리논리학에서 함수정의를 추상화한 형식 체계로, 이름이 없는 함수 혹은 인라인으로 정의하는 함수로 이해할 수 있다.
인공지능 분야나 AutoCad라는 설계 프로그램에서 쓰이던 Lisp언어에서 물려받았다고 한다.
lambda {파라미터,...} : {표현식}
* 람다식 구성 요소
1. 키워드 lambda
2. 파라미터 : 컴마로 구분되는 1개 이상의 파라미터. 파라미터는 반드시 1개 이상이어야한다.
3. 콜론 :
4. 표현식 : 파라미터와 그외 값으로 이루어지는 일련의 표현식
*10 + 20을 나타내는 python 코드와 lambda식
맵
함수와 리스트를 인자로 받는 리스트이다.
리스트로부터 원소를 하나씩 꺼내서 함수를 적용시킨 다음, 그 결과를 새로운 리스트에 담아준다.
map(함수,리스트)
* 파이썬 2와 파이썬 3의 map사용법
* lambda와 map의 다양한 사용법
필터
리스트에 들어있는 원소들을 함수에 적용시켜 결과가 참인 값들로 새로운 리스트를 만들어준다.
filter(함수, 리스트)
* 파이썬 2와 파이썬 3의 filter사용법
* lambda와 filter의 다양한 사용법
리스트 축약 문법
[{표현식} for {변수} in {반복자/연속열} if {조건표현식}]
리스트 축약은 람다실의 본체가 될 표현식을 그대로 사용하기 때문에 따로 람다함수를 정의할 필요가 없다.
또 if{조건표현식}은 선택적으로 사용할 수 있는데, 이부분은 filter에 해당한다.
장점으로는 하나의 구문에서 맵과 필터를 동시에 쓸 수 있다는 것이다.
그러나 리스트 축약을 사용하게 되면, 리스트 축약 자체가 리스트로 평가되는 표현식 이므로 모든 원소가 한번에 평가되어 리스트가 생성된다.
만약 원본이 100,000개짜리 원소를 만들어내는 제너레이터인 경우, 리스트 축약으로 변환하는 경우, 100,000개 짜리 원소의 리스트가 생성된다는 뜻이다.
리듀스
리듀스는 말 그대로 리스트나 연속열을 줄여나가서 하나의 값으로 축약한다는 의미이다.
reduce (함수, 순서형 자료)
* 리듀스의 동작원리
1. 단계를 거듭할수록 값의 상태의 개수를 점점 줄여나가야 하므로, 여기에 사용되는 연산(함수)은 2인자 함수여야 한다.
즉, 값 두개를 받아서 하나를 리턴한다.
2. 연산을 계속해나가면서 중간값을 누적시켜나갈 변수가 필요하다. 이 변수는 최초의 초기값을 필요로 한다.
3. 중간값과 리스트의 맨 앞에 있는 값. 이렇게 두 값을 1의 함수에 넣어 평가한다. 그 결과로 중간값을 업데이트한다.
4. 다시 중간값과 그 다음 리스트 원소값을 함수에 넣어 평가하고 그 결과로 중간값을 업데이트한다.
5. 리스트의 끝에 다다를때까지 과정을 반복한다.
6. 리스트에 더이상 원소가 없다면 중간값이 최종값이 된다.
* 기술적으로 reduce 함수 작성
* 리듀스를 사용한 리스트 조작 구현
* 최대, 최소
* 맵 / 필터
* 그 외 다양한 정보 및 출처
여러분의 댓글과 관심은 직장 노예의 엔도르핀이 됩니다 :)
댓글
댓글 쓰기