작성일자 :2023-10-09
Ver 0.1.1
람다(lambda)
람다 형식은 인공지능 분야나 AutoCAD라는 설계 프로그램에서 쓰이는 Lisp 언어에서 물려받았다고 한다.
특히 람다 표현식은 함수를 딱 한 줄만으로 다른 함수의 인수로 넣을 때 주로 사용한다.
lambda 매개변수 : 표현식
예시로 다음은 두 수를 더하는 함수다.
>>> def hap(x, y):
... return x + y
...
>>> hap(10, 20)
30
이것을 람다 형식으로 표현하면 아래와 같다.
>>> (lambda x,y: x + y)(10, 20)
30
map()
map(함수, 리스트)
이 함수는 함수와 리스트를 인자로 받고, 리스트로부터 원소를 하나씩 꺼내서 함수를 적용시킨 다음, 그 결과를 새로운 리스트에 담아준다.
>>> map(lambda x: x ** 2, range(5)) # 파이썬 2
[0, 1, 4, 9, 16]
>>> list(map(lambda x: x ** 2, range(5))) # 파이썬 2 및 파이썬 3
[0, 1, 4, 9, 16]
위의 map 함수가 매개변수로 받은 함수는 lambda x: x ** 2이고, 리스트로는 range(5)를 받았다.
map 함수는 리스트에서 원소를 하나씩 꺼내서 함수를 적용시킨 결과를 새로운 리스트에 담아주니까, 위의 예제는 0을 제곱하고, 1을 제곱하고, 2, 3, 4를 제곱한 것을 새로운 리스트에 넣어주는 것이다.
reduce()
reduce(함수, 시퀀스)
형식은 위와 같구요, 시퀀스(문자열, 리스트, 튜플)의 원소들을 누적적으로(?) 함수에 적용시킨다.
>>> from functools import reduce # 파이썬 3에서는 써주셔야 해요
>>> reduce(lambda x, y: x + y, [0, 1, 2, 3, 4])
10
위의 예제는 먼저 0과 1을 더하고, 그 결과에 2를 더하고, 거기다가 3을 더하고, 또 4를 더한 값을 돌려줍니다. 한마디로 전부 다 더하라는 것이다.
filter()
filter(함수, 리스트)
파이썬의 필터는 이렇게 생겼는데요, 리스트에 들어있는 원소들을 함수에 적용시켜서 결과가 참인 값들로 새로운 리스트를 만들어준다. 다음은 0부터 9까지의 리스트 중에서 5보다 작은 것만 돌려주는 예제이다.
>>> filter(lambda x: x < 5, range(10)) # 파이썬 2
[0, 1, 2, 3, 4]
>>> list(filter(lambda x: x < 5, range(10))) # 파이썬 2 및 파이썬 3
[0, 1, 2, 3, 4]
lambda x: x<5 라고 쓰니까 왠지 수학책에서 본 듯한 느낌이 들지 않습니까? 수학자들이 파이썬을 좋아한다던데…
위의 예제가 어떻게 돌아가는지는 척 보면 아시겠죠?
0부터 9까지의 리스트에서 숫자를 하나씩 꺼낸다.
그 숫자를 x라 하고, x < 5 가 '참'이면 살려준다.
살아남은 것들은 새로운 리스트에 넣어준다.